【opencv课后练习】-- 第三章节2-4

题目2:创建一个三通道二维矩阵,字节类型,大小为100*100,并设置所有数值为0 。

        a.在矩阵中使用void cvCircle(CvArr* img,CvPoint center,intradius,CvScalar color,int thickness = 1,int line_type = 8,int shift = 0)

            b.使用第2章所学的方法来显示这幅图像

/*
	创建一个三通道二维矩阵,字节类型,大小为100*100,并设置所有数值为0
	a.在矩阵中使用void cvCircle(CvArr* img,CvPoint center,intradius,CvScalar color,int thickness = 1,int line_type = 8,int shift = 0)
	b.使用第2章所学的方法来显示这幅图像
*/
#include <cv.h>
#include <highgui.h>
#include <iostream>                
using namespace std;  
using namespace cv;
int main ()
{
	//创建一个三通道二维矩阵
	CvMat* m = cvCreateMat(100,100,CV_8UC3);
	int value = 0;
	//每个位置设置为0
	for(int i = 0 ; i <100 ; i++)
	{
		for(int j = 0; j<100; j++)
		{
			*((int*)CV_MAT_ELEM_PTR (*m,i,j)) = value;
		}
	}
	cvCircle(m,cvPoint(50,50),30,cvScalar(200,200,200),1,8,0);
	cvNamedWindow("chapter3-2",CV_WINDOW_AUTOSIZE);
	cvShowImage("chapter3-2",m);
	cvWaitKey(0);
	cvDestroyWindow("chapter3");
	return 0;
}

效果图:

题目3:创建一个拥有三个通道的二维字节类型矩阵,大小为100*100,并将所有值赋为0.通过函数cvPtr2D将指针指向中间的通道(“绿色”)。以(20,5)与(40,20)为顶点间画一个绿色的长方形。

/*
创建一个拥有三个通道的二维字节类型矩阵,大小为100*100,并将所有值赋为0。
通过函数cvPtr2D将指针指向中间的通道(“绿色”)。以(20,5)与(40,20)为顶点间画一个绿色的长方形。
*/
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
using namespace cv;
int  main()
{
	//创建一个三通道二维矩阵
	CvMat* m = cvCreateMat(100, 100, CV_8UC3);
	//每个位置设置为0
	//int value = 0;
	//for (int i = 0; i <100; i++)
	//{
	//	for (int j = 0; j<100; j++)
	//	{
	//		*((int*)CV_MAT_ELEM_PTR(*m, i, j)) = value;
	//	}
	//}
	cvZero(m);
	int left = 20, top = 5, right = 40, bottom = 20;
	for (; left <= right; left++)
	{
		*(cvPtr2D(m, top, left, NULL) + 1) = 255;
		*(cvPtr2D(m, bottom, left, NULL) + 1) = 255;
	}
	left = 20;
	for (; top <= bottom; top++)
	{
		*(cvPtr2D(m, top, left, NULL) + 1) = 255;
		*(cvPtr2D(m, top, right, NULL) + 1) = 255;
	}
	/*CvPoint p1, p2;
	p1.x = 20;
	p1.y = 5;
	p2.x = 40;
	p2.y = 20;
	cvRectangle(m, p1, p2, Scalar(0, 255, 0), 1, 8, 0);*/
	cvNamedWindow("chapter3-3", CV_WINDOW_AUTOSIZE);
	cvShowImage("chapter3-3", m);
	cvWaitKey(0);
	cvDestroyWindow("chapter3-3");
	return 0;
}

效果图:

题目四:创建一个大小为100x100的三通道RGB图像。将它的元素全部置0.使用指针算法以(20,5)
与(40,20)为顶点绘制一个绿色平面

/*
创建一个大小为100x100的三通道RGB图像。将它的元素全部置0.使用指针算法以(20,5)
与(40,20)为顶点绘制一个绿色平面
*/
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
using namespace cv;
void  main()
{
	IplImage* img = cvCreateImage(cvSize(100, 100), IPL_DEPTH_8U, 3);
	cvZero(img);
	//绿色:R:0 G:255 B:0
	for (int i = 5; i < 20; i++)
	{
		////指针指向当前行  
		uchar* date = (uchar*)(img->imageData + i*img->widthStep);
		//当前行数据依次为RGB
		for (int j = 20; j < 40; j++)
		{
			//R
			date[3 * j] = 0;
			//G
			date[3 * j + 1] = 255;
			//B
			date[3 * j + 2] = 0;
		}
	}
	cvNamedWindow("chapter3-4",1);
	cvShowImage("chapter3-4", img);
	
	cvWaitKey(0);
	cvDestroyWindow("chapter3-4");
}

效果图:


猜你喜欢

转载自blog.csdn.net/dynamci/article/details/80610758