gpt4 book ai didi

c++ - OpenCV ROI 越界 : Fill with black?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:12 31 4
gpt4 key购买 nike

我正在使用 OpenCV 从大图像中获取小的矩形 ROI,并将 ROI 保存到文件中。有时,ROI 会超出图像范围。我需要一种方法让生成的 Mat 显示大图像中边界内的部分,并为其余部分显示黑色。

为了帮助解释,假设您有一张区域 map 图像。我知道一个人在 map 上的位置,并想在 map 上截取 500x500 像素的部分,并以他们的位置为中心。但是当用户到达 map 边缘时,这个 500x500 部分的一部分将需要“离开 map ”。所以我希望它用黑色填充。

OpenCV 最好能够通过填充黑色(就像使用 warpAffine 旋转图像时那样)优雅地处理越界 ROI(例如负左上角值)但事实似乎并非如此。对于如何实现这个目标有什么建议吗?

最佳答案

所有其他答案对我来说似乎有点太复杂了。简单地:

// Create rects representing the image and the ROI
auto image_rect = cv::Rect({}, image.size());
auto roi = cv::Rect(-50, 50, 200, 100)

// Find intersection, i.e. valid crop region
auto intersection = image_rect & roi;

// Move intersection to the result coordinate space
auto inter_roi = intersection - roi.tl();

// Create black image and copy intersection
cv::Mat crop = cv::Mat::zeros(roi.size(), image.type());
image(intersection).copyTo(crop(inter_roi));

引用图片:

enter image description here

关于c++ - OpenCV ROI 越界 : Fill with black?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42017427/

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