OpenCV中mask的设置方法?

来源:百度知道 编辑:UC知道 时间:2024/06/10 21:11:09
小弟我初学openCV,手上没有特别系统的资料。
想问一下:cvXor等函数中需要调用mask图像,这个图像应该怎样设置或者初始化?请给出完整源代码实例
谢谢!
又:openCV中的IplImage类型图像能否像一般数组一样进行修改?如edge[1][1]=1等等。

N+1年没用百度了......
首先本人也很菜哈
IplImage提供了图像点阵指针,imageData ,具体操作随便一本opencv的书都会讲
cvXor 的mask今天正在研究, 一般传null就ok
//src1,src2,传入图像,虽然函数声明是const CvArr* 但还是要传IplImage
//dst 肯定是传出
没实验.但以opencv的德性应该要求这几幅图 size depth nChannels 相同
怕麻烦就cvCloneImage....
(想到了当年的我啊,这种问题这儿是不会有答案的)

void cvXor计算两个数组中的每个元素的按位异或。
void cvXor (const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask = NULL);
得到dst(I) = src1(I)^src2(I)。
你提到的mask形参,一般来说可以直接填入0或者缺省。

以下给你一个例子,我用到的函数是cvOr,它和你说的cvXor都是cxcore的一种算术函数,void cvOr (const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask = NULL);形参是一致的,只是计算不同。
void backgroundDiff(IplImage *I, IplImage *Imask)
{ cvCvtScale(I,Iscratch,1,0);
cvSplit( Iscratch, Igray1,Igray2,Igray3, 0 );
cvInRange(Igray1,Ilow1,Ihi1,Imask);
cvInRange(Igray2,Ilow2,Ihi2,Imaskt);
cvOr(Imask,Imaskt,Imask, 0);
cvInRange(Igray3,Ilow3,Ihi3,Imaskt);
cvOr(Imask