OpenCV中mask的设置方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV中mask的设置方法?相关的知识,希望对你有一定的参考价值。

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

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,Imaskt,Imask, 0);
cvSubRS( Imask, cvRealScalar(255), Imask, 0);

这段程序摘自Learning OpenCV教程第九章的background subtraction。在第6和8行,“cvOr(Imask,Imaskt,Imask, 0);”,Imask是第一个原数组(注意,不要和mask形参搞混了),Imaskt是第二个原数组,Imask同时也是输出数组,最后一个参数0则是mask。得到Imask=Imask|Imaskt。
同理,如果你要用cvXor,则应该写作“cvXor(src1, src2, dst, 0);”

关于函数怎么使用,可以在openCV的中文论坛(http://www.opencv.org.cn/forum/)的“参考手册”里找到。

IplImage可以用结构的方法修改。比如在做视频处理的时候,一开始常犯的错误是做出的视频上下颠倒,这时候要将origin设为1。
例如:
CvCapture* capture;
IplImage *src, *dst;
while(1)
src = cvCaptureFromCAM( CV_CAP_ANY );
//输入src,经过一些处理后,输出dst。中间过程省略。
dst->origin = 1; //保证dst没有上下颠倒。
cvShowImage("dst", dst);
参考技术A N+1年没用百度了......
首先本人也很菜哈
IplImage提供了图像点阵指针,imageData ,具体操作随便一本opencv的书都会讲
cvXor 的mask今天正在研究, 一般传null就ok
//src1,src2,传入图像,虽然函数声明是const CvArr* 但还是要传IplImage
//dst 肯定是传出
没实验.但以opencv的德性应该要求这几幅图 size depth nChannels 相同
怕麻烦就cvCloneImage....
(想到了当年的我啊,这种问题这儿是不会有答案的)本回答被提问者采纳

带有虚线或虚线的opencv多边形

我这里有一行代码,它使用opencv的python绑定:

cv2.polylines(mask, [pts],True, ignore_mask_color)

这会在图像蒙版上绘制蓝色多边形。

但有多种方法可以将多边形的线条风格化?不是太多。只是点缀,或虚线,这是真的。

答案

除了color,您还可以在thickness方法中使用lineTypecv2.polylines参数。有关更多详细信息,请参阅OpenCV docs for cv2.polylines

不幸的是,你可以在这里获得lineType的唯一选择

  • 8(或省略) - 8连接线。
  • 4 - 4连接线。
  • CV_AA - 抗锯齿线。

不知道为什么OpenCV还没有直接的方法来实现它。但是,this post可能会帮助您实现所需。

以上是关于OpenCV中mask的设置方法?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV修复方法不会从IC图像中删除文本

dev EditMask 设置方法

带有虚线或虚线的opencv多边形

求C++调用opencv设置获取摄像头图像大小的方法

OpenCV探索之路(十三):详解掩膜mask

OpenCv实时设置摄像头参数/获得摄像头参数值的方法论