gpt4 book ai didi

c++ - 如何修复 OpenCV 中 cv::boundingRect 的错误

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:38 27 4
gpt4 key购买 nike

我使用的是 OpenCV 4.0.0 版。我正在尝试将一些图像拼接在一起并修剪生成的图像,虽然我能够拼接图像,但我无法修剪生成的图像。

我的程序不断中止并出现以下错误:

libc++abi.dylib: terminating with uncaught exception of type cv::Exception: OpenCV(4.0.0) /Users/RAR/opencv/modules/core/src/umatrix.cpp:545: error: (-215:Assertion failed) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function 'UMat'

Abort trap: 6

错误发生在下面代码中的 stitched = stitched(cv::boundingRect(c)); 行。

while (cv::countNonZero(sub) > 0) {
cv::erode(minRect, minRect, cv::Mat()); // Erode the minimum rectangular mask
cv::subtract(minRect, thresh, sub); // Subtract the thresholded image from the minmum rectangular mask (count if there are any non-zero pixels left)
std::vector<std::vector<cv::Point>> cnts4;
cv::findContours(minRect.clone(), cnts4, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
c = cnts4[0];
for (auto iter = cnts4.begin(); iter != cnts4.end(); ++iter) {
if (cv::contourArea(*iter) > cv::contourArea(c)) { // Finds the largest contour (the contour/outline of the stitched image)
c = *iter;
}
}

stitched = stitched(cv::boundingRect(c)); // Extract the bounding box and use the bounding box coordinates to extract the final stitched images
}

为什么会出现此错误?

最佳答案

来自 OP 的评论:

stitched: cols: 4295 rows: 2867 bounding rect[4274 x 2845 from (11, 12)] 
stitched: cols: 4274 rows: 2845 bounding rect[4272 x 2843 from (12, 13)]

在第一种情况下,矩形试图提取尺寸为 (4274, 2845) 的尺寸来自 (11, 12)stitched图像。这意味着它从 (11, 12) 获取像素。至 (4285, 2857) ,在 stitched 的范围内图片自 stitched图片的大小为 (4295, 2867) . 没问题

在第二种情况下,矩形试图提取尺寸为 (4272, 2843) 的尺寸。来自 (12, 13)stitched图像。这意味着它从 (12, 13) 获取像素。至 (4284, 2856) , 自 stitched 以来,它超出了 stitched 图像的范围图片的大小为 (4274, 2845) . 问题

您尝试提取的子图像比大图像大得多。

(-215:Assertion failed) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows

错误消息也表明了这一点。 roi在错误消息中指的是您尝试使用 cv::boundingRect(c) 提取的子图像和 mstitched图像。此矩形的坐标超出了 stitched 的大小图片。

您可以通过手动设置矩形的坐标来测试它。

你不应该得到 stitched(cv::Rect(11, 12, cv::Size(4274, 2845) 的错误

您将收到 stitched(cv::Rect(12, 13, cv::Size(4272, 2843) 的错误

关于c++ - 如何修复 OpenCV 中 cv::boundingRect 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56840059/

27 4 0
文章推荐: python - 如何使用 IP Cam 代替 USB Web Cam 检测/识别人脸
文章推荐: html - 我怎样才能让这个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com