《学习OpenCV》课后习题解答2

题目:(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");
}
posted @ 2016-05-20 11:17  huahai  阅读(140)  评论(0编辑  收藏  举报