在图像上填充矩形区域外的黑色

时间:2017-06-19 13:10:45

标签: c++ image opencv

使用OpenCV 3.2

需要用黑色填充图像的两侧。

我为每一方创建了rect对象。并简单地在图片上绘制它。但解决方案似乎很麻烦。

// Border 100 px
cv::Rect top_rect(0, 0, img.size().width, 100)
...
cv::rectangle(img, top_rect, cv::Scalar(0, 0, 0), CV_FILLED);
cv::rectangle(img, bot_rect, cv::Scalar(0, 0, 0), CV_FILLED);
cv::rectangle(img, left_rect, cv::Scalar(0, 0, 0), CV_FILLED);
cv::rectangle(img, right_rect, cv::Scalar(0, 0, 0), CV_FILLED);

我找到了类似的解决方案:

Rect roi(100, 100, 600, 400);
Mat result_img = img(roi);

但是这个解决方案会改变图像的大小。 copyMakeBorder - 也会调整大小。 我需要:在矩形外面取一个区域并用黑色填充。 图像尺寸应保持不变。

OpenCV中是否有现成的功能?

1 个答案:

答案 0 :(得分:2)

您可以使用的一种方法是使用蒙版复制图像:

inputMat.copyTo(outputMat, maskMat);

maskMat是一个cv::Mat,它具有相同的图像大小,但是是二进制的。 ROI应包含像素值1,其余值应为0.