【发布时间】: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 的转换可能正是您要找的:stackoverflow.com/questions/14571790/…