我想按比例因子调整我的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方法,但我不确定如何使用它。