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

问题描述 投票:1回答:1

使用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中是否有现成的功能?

c++ image opencv
1个回答
2
投票

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

inputMat.copyTo(outputMat, maskMat);

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

© www.soinside.com 2019 - 2024. All rights reserved.