《学习OpenCV》练习题第三章第三题
1 #include <highgui.h> 2 #include <cv.h> 3 #include <stdio.h> 4 5 #pragma comment (lib,"opencv_calib3d231d.lib") 6 #pragma comment (lib,"opencv_contrib231d.lib") 7 #pragma comment (lib,"opencv_core231d.lib") 8 #pragma comment (lib,"opencv_features2d231d.lib") 9 #pragma comment (lib,"opencv_flann231d.lib") 10 #pragma comment (lib,"opencv_gpu231d.lib") 11 #pragma comment (lib,"opencv_haartraining_engined.lib") 12 #pragma comment (lib,"opencv_highgui231d.lib") 13 #pragma comment (lib,"opencv_imgproc231d.lib") 14 #pragma comment (lib,"opencv_legacy231d.lib") 15 #pragma comment (lib,"opencv_ml231d.lib") 16 #pragma comment (lib,"opencv_objdetect231d.lib") 17 #pragma comment (lib,"opencv_ts231d.lib") 18 #pragma comment (lib,"opencv_video231d.lib") 19 20 /* 21 *《学习OpenCV》第三章第三题 22 * 完成时间:1:34 3/2 星期六 2013 23 */ 24 25 #define ROWS 400 // 矩阵行数 26 #define COLS 400 // 矩阵列数 27 28 // 定义绿色长方形的两个顶点 29 CvPoint point1 = cvPoint(80, 20); 30 CvPoint point2 = cvPoint(160, 80); 31 32 // Help function 33 // 检查当前点是否在要画的长方形区域内 34 bool isThePointInRectangle(int x, int y) 35 { 36 if( (x <= point2.x) && (y <= point2.y) 37 & (x >= point1.x) && (y >= point1.y)) 38 return true; 39 else 40 return false; 41 } 42 43 int main() 44 { 45 // 三通道的二维字节类型矩阵 46 CvMat* mat = cvCreateMat(ROWS, COLS, CV_8UC3); 47 48 // 将所有数值初始化为零 49 cvZero(mat); 50 // 获得矩阵元素(0,0)的指针 51 uchar *p = (uchar*)cvPtr2D(mat, 0, 0); 52 // 为矩阵赋值,画长方形 53 for(int i = 0; i < mat->cols; i++) 54 { 55 for(int j = 0; j < mat->rows; j++) 56 { 57 p = (uchar*)cvPtr2D(mat, i, j); 58 // 使其指向中间的通道 59 p++; 60 if(isThePointInRectangle(i, j) == true) 61 { 62 *p = 255; 63 } 64 p++; 65 } 66 } 67 68 cvShowImage("img", mat); 69 cvWaitKey(0); 70 71 cvReleaseMat(&mat); 72 cvDestroyAllWindows(); 73 74 return 0; 75 }
运行结果: