如何调整ROI的大小?

3
我想按比例因子调整我的ROI大小。 我正在尝试以下方法:
std::cout << roi.x << ", " << roi.y << std::endl;
std::cout << roi.x + roi.width << ", " << roi.y + roi.height << std::endl;

std::cout << img.size().width << ", " << img.size().height << std::endl << std::endl;

scale = 0.1; // 10%

cv::Rect new_size(
        roi.x*(1-scale),
        roi.y*(1-scale),
        (roi.x + roi.width)*(1+scale),
        (roi.y + roi.height)*(1+scale));
cv::Mat tmp = img(new_size);

它会输出:
828, 142
892, 206
2048, 1150

281, 173
356, 248
2048, 1150

1025, 168
1100, 243
2048, 1150

并且:

OpenCV Error: 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 Mat, file /tmp/opencv-TqF1/opencv-2.4.7.1/modules/core/src/matrix.cpp, line 323
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /tmp/opencv-TqF1/opencv-2.4.7.1/modules/core/src/matrix.cpp:323: error: (-215) 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 Mat

我想设置一个ROI区域,但它超出了我的图像范围。我的问题是:我需要手动设置吗?如果需要,如何缩放直到触及边界?opencv应该有这样的方法,对吗?我一直在搜索,找到了adjustROI方法,但我不确定如何使用它。


你的投资回报率是哪种类型? - Engine
应该是2D或2F点! - Engine
1个回答

2
你可以手动检查/限制ROI边界,也可以使用Rect重叠,像这样:
cv::Rect new_size(/*Construct rect here*/);
cv::Rect imgBounds(0,0,img.cols,img.rows);
new_size = new_size & imageBounds;
// Now you can do the following without worrying (except in the case that new_size is empty!!)
cv::Mat tmp = img(new_size);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接