OpenCV基本函數操作作業

1.創建一個100*100的兩維三通道矩陣,初始值爲全0

a.使用cv::circle在矩陣中畫一個圓;

b.顯示這個圖片。


	Mat src3 = Mat(100,100,CV_8UC3, Scalar::all(0));
	Point pt(50, 50);

	circle(src3, pt, 40, Scalar(0, 255, 0));
	imshow("1", src3);
	waitKey(0);

                                                                 

2.創建一個100*100的兩維三通道矩陣,初始值爲全0

a.使用at<>這種遍歷方式,畫一個由(20,5)(40,20)的綠色矩形

b.顯示這個圖片。

y在20-40之間,x在5-20之間。

 

Mat m1 = Mat(100, 100, CV_8UC3, Scalar(0));
for (int i = 0; i < m1.rows; i++)
{
	for (int j = 0; j < m1.cols; j++)
	{
		if (j >= 20 && j <= 40 && i >= 5 && i <= 20)
		{
			m1.at<Vec3b>(j, i)[0] = 0;
			m1.at<Vec3b>(j, i)[1] = 255;
			m1.at<Vec3b>(j, i)[2] = 0;
		}
	}
}
imshow("execrise 2", m1);
waitKey();
return 0;

                                                                         

3、第二題同樣的效果,但是使用指針方式

Mat m1 = Mat(100, 100, CV_8UC3, Scalar(0));
for (int i = 0; i < m1.rows; i++)

{
	uchar *outData = m1.ptr<uchar>(i);

	for (int j = 0; j < m1.cols; j++)
	{
		if (j >= 20 && j <= 40 && i >= 5 && i <= 20)
		{
			outData[j*3+1] = 255;
		}
	}
}
imshow("execrise 3", m1);

waitKey();
return 0;

                                                                       

4、練習使用ROI。創建一個210*210的單通道圖像。使用ROIsetto方法,由邊緣到中間,使得圖像的值分別爲02040……200。每一層都爲10像素寬;

setTo函數

   Mat& setTo(InputArray value, InputArray mask=noArray()); 

把矩陣mask中元素不爲0的點全部變爲value值,是0保持不變;

Mat m1 = Mat(210, 210, CV_8U, Scalar(0));
for (int i = 0; i < 105; i=i+10)

{
	Mat roi = m1(Rect(i, i, 210 - i * 2, 210 - i * 2));
		roi.setTo(i * 2);
	
}
imshow("execrise 4", m1);

waitKey();
return 0;

                                                                

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章