如何仅在掩码> 0?
的情况下将Scalar添加到Mat此代码没有按预期工作,掩码> 0的区域是img.value +标量,但掩码= 0 us 0,但我期望img.value。
add(image,Scalar(0,0,80),dst, mask);
按预期工作的代码是
Mat dst;
image.copyTo(dst,mask);
add(dst,Scalar(0,0,80),dst, mask);
dst.copyTo(image,mask);
dst= image;
但它不是很清楚,有没有更简单的变体?
答案 0 :(得分:1)
由于您的dst
图片未初始化,因此屏蔽之外的值设置为0
。
如果将初始化矩阵用作目标,则会获得预期的行为。它可以是你的源矩阵;
#include <opencv2\opencv.hpp>
using namespace cv;
int main()
{
// Initial image
Mat3b image(10, 10, Vec3b(0,2,0));
// Mask
Mat1b mask(10,10, uchar(0));
rectangle(mask, Rect(0,0,3,4), Scalar(255), CV_FILLED);
add(image, Scalar(0, 0, 3), image, mask);
return 0;
}
或者,如果您需要保持源矩阵不变,您只需将源图像克隆到add
之前的目标图像,例如:
#include <opencv2\opencv.hpp>
using namespace cv;
int main()
{
// Initial image
Mat3b image(10, 10, Vec3b(0,2,0));
// Mask
Mat1b mask(10,10, uchar(0));
rectangle(mask, Rect(0,0,3,4), Scalar(255), CV_FILLED);
Mat3b dst = image.clone();
add(image, Scalar(0, 0, 3), dst, mask);
return 0;
}