2012-07-27 83 views
1

我正在尝试使用带alpha通道的PNG从视频流中“屏蔽”当前帧。OpenCV处理图像的部分

我的PNG在我不想处理的区域有黑色像素,在其他区域有alpha图像 - 目前它保存了4通道的4色图像,但它可能是二进制图像。

我正在图像上进行背景减除和轮廓查找,所以我想如果我将我的'蒙版'图像中的黑色像素复制到当前,那么在黑色区域中将找不到轮廓。这是一个好方法吗?如果是这样,我怎样才能将一个cv::Mat上的黑色/非透明像素复制到另一个上面?

回答

2

您所描述的内容听起来像是使用图像蒙版。当你在OpenCV库中有很多方法支持掩码时,你会在alpha通道中执行它,这很奇怪。为什么不使用alpha通道,而是在任何想要查找轮廓的位置创建一个具有非零值的单独二进制图像?

根据您使用哪种算法,您的假设是正确的,即在黑色像素区域中不会找到轮廓。不幸的是,我不知道有没有任何有效的方法将像素从一个图像复制到另一个图像,而没有深入到Mat结构的本质,并且从一个字节到另一个像素迭代。使用前面介绍的掩模思想和预处理函数,然后将生成的二进制图像发送到findContours之类,可以让您充分利用OpenCV库已经编写好且优化的代码,并保留更多你头上的头发,它属于哪里;)。

+2

请参阅http://docs.opencv.org/modules/core/doc/basic_structures.html?highlight=copyto#void Mat :: copyTo(OutputArray m,InputArray mask)const – 2012-07-27 18:17:04

+0

谢谢,我确实开始看通过行/列和复制值:)。是的,到目前为止,我很享受简历,即使我渴望与所有事情一起玩,我应该有一个结构来学习。另外,我发现了另一个方便的函数:'cv :: addWeighted' – 2012-07-27 19:45:16