基于黑白蒙版组合两个图像
Posted
技术标签:
【中文标题】基于黑白蒙版组合两个图像【英文标题】:Combine two images based on a black and white mask 【发布时间】:2013-06-05 21:53:11 【问题描述】:我想创建一个掩码操作...
我有两个相同大小的输入图像(它们是否必须具有相同的深度/通道数?我想成为任何东西,可能是 3 个通道,CV_32FC3
或灰色......)我创建了一个相同大小(行和列)的掩码
cv::Mat mask = cv::Mat(image1.rows, image1.cols, CV_8UC1);
蒙版由黑白区域创建。
我想创建一个新的 cv::Mat,它的 image1 的 mask 为 1,image2 的 mask 为 0。
我查看了 cv::filter2D
和 copyTo
... 还查看了 addWeighted,但我不想混合它们 - 每个图像的区域应该完全分开。 roi 无济于事 - 蒙版可能不包含矩形,而是一个或多个多边形。
我找不到符合我要求的东西。
是否有任何 OpenCV 函数可以根据蒙版组合我的图像?还是我必须创建自己的,循环遍历行和列?
谢谢。
【问题讨论】:
在新的/编辑的情况下,您应该创建两个单独的掩码,MASK1 和 MASK2。将 MASK1 应用于 IMAGE1,将 MASK2 应用于 IMAGE2,留下 RESULT1 和 RESULT2。现在您只需将一张图片的一部分复制到另一张图片上。 谢谢您,您给我的第二个参考有效,我能够将一张图像复制到结果中,然后使用蒙版复制到第二张图像。我还在玩它,当图像的深度不同时,我会遇到断言错误......但我猜这是一个不同的故事。 没问题。最简单的解决方案是使两个生成的图像具有相同的深度(理想情况下,使两者都使用两者中较高的位深度),然后您正在执行像素复制操作。一个简单的方法实际上是:“对于 MASK2 中的每个黑色像素,将像素从 RESULT2 中的相同位置复制到 RESULT1 中的相同位置”。 我一直在尝试将 1 通道转换为 3 通道,到目前为止没有多大成功...我知道如何转换深度,我会为最低图像制作一个临时文件,使用与最高的深度相同。但我仍在试验 1 到 3 通道...所以我很接近了 :-) 看了 cv::merge 和 cvtColor 灰度到 RGB 的转换可能正是您要找的:***.com/questions/14571790/… 【参考方案1】:只需使用bitwise_and()
函数即可。下面的参考资料包括一个完整的工作示例。
参考资料:
-
How to "zero" everything within a masked part of an image in OpenCV
OpenCV bitwise_and + mask
【讨论】:
以上是关于基于黑白蒙版组合两个图像的主要内容,如果未能解决你的问题,请参考以下文章
[js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)
html5 canvas系列教程-像素操作(反色,黑白,亮度,复古,蒙版,透明)