今天需要对图像中的某片区域设置颜色,于是使用void cvSet( CvArr* arr, CvScalar value, const CvArr* mask=NULL )函数,对于mask参数,我想当然的认为是创建一个imageHeader,然后将其数据指针设置为目标区域的起始点,size设置为目标区域,widthStep设置为源图像一样就行了。谁知出现错误。查了下参考手册,看到这么几句话
操作掩码是8比特单通道的数组,它指定了输出数组中被改变的元素。
函数 cvSet 拷贝数量值到输出数组的每一个被mask选定的元素:
arr(I)=value if mask(I)!=0
于是猜测mask的尺寸应该和源图像一致,对于源图像而言,某个像素的颜色是否被设置取决于对应的mask数组中的那个元素的值是否为true
为true则设置,false则不设置。
于是试着将某个图像的上半部分的颜色设置为黑色
代码如下:
#include <iostream>
#include "cv.h"
#include "highgui.h"
using namespace std;
int main()
{
cvNamedWindow("SRC");
cvNamedWindow("DEST");
IplImage* img = cvLoadImage("D:\\F Download\\Lixtary-300.png");
cvShowImage("SRC", img);
IplImage* mask = cvCreateImage(cvSize(