OpenCV将黑色像素从一个Mat添加到另一个Mat。 C ++

时间:2016-03-30 13:11:38

标签: c++ arrays opencv

我正在尝试创建一个概述图像效果,它会拍摄图像(或视频),找到轮廓,然后将它们作为黑线绘制在原始图像的顶部。我现在正在获得大纲:

Mat im = imread(...);
Mat outline;
cvtColor(im, outline, COLOR_BGR2GRAY);
GaussianBlur(outline, outline, Size(15,15),2,2);
Canny(outline, outline, 0, 30, 3);
bitwise_not(outline, outline);
cvtColor(outline,outline, COLOR_GRAY2BGR);

然后我将如何确保所有黑色像素都添加到im

1 个答案:

答案 0 :(得分:2)

您可以使用带掩码的setTo

你应该这样做:

im.setTo(Scalar(0,0,0), ~outline);

表示:在图片im中,将outline中黑色的所有像素设置为黑色(Scalar(0,0,0)

或者你可以避免使用bitwise_not,然后再避免再次否定掩码。最终代码如下:

Mat im = imread(...);
Mat outline;
cvtColor(im, outline, COLOR_BGR2GRAY);
GaussianBlur(outline, outline, Size(15,15),2,2);
Canny(outline, outline, 0, 30, 3);

im.setTo(Scalar(0,0,0), outline);

// or
// bitwise_not(outline, outline);
// im.setTo(Scalar(0,0,0), ~outline);

imshow("Result", im);
waitKey();