【发布时间】:2021-04-11 02:13:45
【问题描述】:
我有一个名为 maskMat 的 4 通道遮罩,颜色为红色(但如果需要,我可以选择任何其他颜色)。
我有一个名为 imageMat 的 4 通道图像。
我想将 maskMat 之外的所有 mat 像素设置为透明色(以便只保留位于 maskMat 区域中的 imageMat 部分)。
如何使用 OpenCV 做到这一点? (我使用 openCV Java,但任何语言的答案都可以)
谢谢。
【问题讨论】:
-
请提供显示输入和输出的代表性图像,或者提供几行代码来生成代表性图像,否则回答者会浪费时间猜测您的意思。谢谢。
-
1.将图像转换为 4 通道 witg cvtColor(BGR2BGRA); 2.对于每个像素:如果未设置掩码(像素):将像素值设置为(b,g,r,0)
-
@Micka 我不推荐循环和单独触摸像素。这可以通过掩码操作轻松完成。此外,问题已经表明矩阵是 4 通道的,因此您对 cvtColor 的建议毫无意义。
-
@Christoph Rackwitz:我懒得再读一遍这个问题了。 Convertin to BGRA 可以很容易地跳过,但对于其他搜索类似问题的人来说是一个提示。循环版本很容易理解。除了透明度之外,使用 .setTo 的解决方案还会更改像素值。使用按位运算的解决方案需要将掩码转换为 4 通道,从而使操作效率降低且更复杂。在 C++ 中,循环并不是那么低效。你为什么不写一个答案?
-
@Regis_AG 我可以在 python 中给你一个答案,但大多数操作都会使用 numpy。您将不得不在 cv::Mat 上使用 OpenCV 的文档...无论如何请查阅文档。
标签: opencv opencv3.0 opencv-python opencv4android opencv-contour