fdh*_*fdh 19 c++ opencv image mask image-processing
我有一个二进制掩码,我想永久应用于彩色图像我该怎么做?二进制掩码应该是永久性的 - 因为我不希望每次调用函数时都将掩码重新应用于图像.
基本代码示例将不胜感激.如果您使用代码,请解释代码而不是发布代码.
谢谢
Cha*_*_99 61
虽然@perrejba的答案是正确的,但它使用了传统的C风格函数.由于问题标记为C++,您可能希望使用方法:
inputMat.copyTo(outputMat, maskMat);
所有对象都是类型cv::Mat
.
请注意,屏蔽是二进制的.掩码中的任何非零值都被解释为"do copy".即使蒙版是灰度图像.
还要注意.copyTo()函数在复制之前不会清除输出.
如果要永久更改原始映像,则必须执行其他复制/克隆/分配.未为重叠输入/输出图像定义copyTo()函数.所以你不能使用相同的图像作为输入和输出.
SSt*_*eve 10
您不对图像应用二进制掩码.您(可选)在处理函数调用中使用二进制掩码来告诉函数您要处理的图像像素.如果我完全误解了你的问题,你应该添加更多细节来澄清.
嗯,这个问题出现在搜索结果的顶部,所以我相信我们在这里需要代码示例。这是 Python 代码:
import cv2
def apply_mask(frame, mask):
"""Apply binary mask to frame, return in-place masked image."""
return cv2.bitwise_and(frame, frame, mask=mask)
Run Code Online (Sandbox Code Playgroud)
掩码和帧的大小必须相同,因此像素在掩码所在的位置保持原样,1
在掩码像素为 的位置设置为零0
。
因为C++
它有点不同:
cv::Mat inFrame; // Original (non-empty) image
cv::Mat mask; // Original (non-empty) mask
// ...
cv::Mat outFrame; // Result output
inFrame.copyTo(outFrame, mask);
Run Code Online (Sandbox Code Playgroud)
您可以使用蒙版仅将原始图像的感兴趣区域复制到目标区域:
cvCopy(origImage,destImage,mask);
Run Code Online (Sandbox Code Playgroud)
其中mask
应该是一个8位的单个通道阵列.
有关OpenCV文档的更多信息,请参阅
归档时间: |
|
查看次数: |
91292 次 |
最近记录: |