题目:(P104)
创建一个拥有三个通道的二维字节类型矩阵,大小为100*100,并将所有值赋为0。通过函数cvPtr2D将指针指向中间的通道(“绿色”)。以(20,5)与(40,20)为顶点间画一个绿色的长方形。
解答:
(此题的关键在于懂得函数cvPtr2D的用法)
#include "cv.h"
#include "highgui.h"
int main(int argc, char** argv) {
IplImage *img;
img = cvCreateImage(cvSize(100, 100), IPL_DEPTH_8U, 3);
cvZero(img);
int left = 20, top = 5, right = 40, bottom = 20;//左上方的点(20,5),右下方的点(40,20)
for (; left <= right; left++) //从左到右
{
*(cvPtr2D(img, left, top, NULL) + 1) = 255; //cvPtr2D指向(left,top)坐标元素的第一个通道R,想要得到G通道需要+1。同时注意这里的“*”的用法。
*(cvPtr2D(img, left, bottom, NULL) + 1) = 255;
}
left = 20;
for (; top <= bottom; top++) //从上到下
{
*(cvPtr2D(img, left, top, NULL) + 1) = 255;
*(cvPtr2D(img, right, top, NULL) + 1) = 255;
}
cvNamedWindow("rectangle", CV_WINDOW_AUTOSIZE);
cvShowImage("rectangle", img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("rectangle");
}