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