OpenCV笔记-利用ROI和掩模对图像的局部区域进行操作

代码如下:
#include <highgui.h>

#include <cv.h>

/*

两种使用ROI的方法

使用mask处理图片

*/

int main()

{

    IplImage *image = cvLoadImage("EW.bmp");

    /*感兴趣区域*/

    CvRect rect = cvRect(100, 100, 250, 330);

    /*创建mask,mask为8为单通道数组*/

    CvMat *mask = cvCreateMat(330, 250, CV_8UC1);



    for(int i = 0; i < mask->height; ++i)

    {

        uchar *ptr = (uchar*)(mask->data.ptr + i *    mask->step);

        for(int j = 0; j < mask->width; ++j)

        {

            if(j % 5 == 0)

            {

                *(ptr + j) = 0;

            }

            else

            {

                *(ptr + j) = 1;

            }

        }

    }



    /*第一段代码开始*/

    /*

    cvSetImageROI(image, rect);//设置感兴趣区域

    cvAddS(image, cvScalar(100), image, mask);//把ROI区域内的所有像素加100

    cvResetImageROI(image);//清楚感兴趣区域

    */

    /*第一段代码结束*/



    /*第二段代码开始*/

    IplImage *sub_img = cvCreateImageHeader(

        cvSize(

            rect.width,

            rect.height

        ),

        image->depth,

        image->nChannels

    );



    sub_img->origin = image->origin;

    sub_img->widthStep = image->widthStep;

    sub_img->imageData = image->imageData + 

        rect.y * image->widthStep +

        rect.x * image->nChannels;



    cvAddS(sub_img, cvScalar(100), sub_img, mask);

    cvReleaseImage(&sub_img);

    /*第二段代码结束*/



    cvNamedWindow("Manipulate image with ROI");

    cvShowImage("Manipulate image with ROI", image);

    cvWaitKey(0);

    cvReleaseImage(&image);

    cvDestroyWindow("Manipulate image with ROI");

    return 0;

}
第一段代码和第二段代码的效果是一样的,效果如下:

OpenCV笔记-利用ROI和掩模对图像的局部区域进行操作

你可能感兴趣的:(opencv)