题目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");
}
效果图: