我正在尝试使用带有 alpha 通道的 PNG 从视频流中“屏蔽”当前帧。
我的 PNG 在我不想处理的区域有黑色像素,在其他区域有 alpha - 目前它保存了一个具有 4 个通道的 4 色图像,但它也可能是一个二进制图像。
我正在对图像进行背景减法和轮廓查找,所以我想如果我将我的“蒙版”图像中的黑色像素复制到当前图像中,那么在黑色区域中将找不到轮廓。这是一个好方法吗?如果是这样,我如何从一个cv::Mat
上复制黑色/非透明像素?
您所描述的对我来说听起来像是使用图像蒙版。当 OpenCV 库中有这么多可用的方法支持遮罩时,您会在 alpha 通道中执行此操作很奇怪。与其使用 alpha 通道,不如在您想找到轮廓的任何地方创建一个具有非零值的单独二进制图像?
根据您使用的算法,您的假设是正确的,即您不会在黑色像素区域中找到轮廓。不幸的是,我不知道有任何有效的方法可以选择性地将像素从一个图像复制到另一个图像,而无需深入了解 Mat 结构的本质,以及从一个字节到另一个字节/像素到另一个像素的迭代。将上面介绍的掩码想法与您的预处理函数一起使用,然后将生成的二进制图像发送到 findContours 等,将允许您利用 OpenCV 库已经编写好的和优化的代码,并保留更多你头上的头发,它所属的地方;)。