gpt4 book ai didi

opencv - 如何通过掩码将标量添加到垫子?

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:10 24 4
gpt4 key购买 nike

如何仅在掩码>0 的地方将标量添加到 Mat?

这段代码没有按预期工作,mask>0 的区域是 img.value+scalar 但 mask=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;

但不是很清楚,有没有更简单的变体?

最佳答案

由于您的 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;
}

关于opencv - 如何通过掩码将标量添加到垫子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32077255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com