使用 OpenCV 和 C++ 从图像中提取子图像

six*_*eet 3 c++ opencv

我正在尝试从 openCV 和 C++ 中的 RGB 图像获取子图像。我已经看过有关此主题的其他主题,但它对我不起作用。

这是我使用的代码:

Mat src = imread("Images/00011_00025.ppm");
Rect crop(1, 1, 64, 67);
Mat rez = src(crop);
Run Code Online (Sandbox Code Playgroud)

图像尺寸为 64x67,所以我不明白为什么在控制台中出现以下错误:

断言失败(0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.高度 <= m.rows)

关于这个错误的原因是什么的任何想法?

s1h*_*s1h 8

Rect crop(1, 1, 64, 67);
Run Code Online (Sandbox Code Playgroud)

矩形左上角位于 (1,1) 位置,其大小设置为 64x67。

Mat rez = src(crop);
Run Code Online (Sandbox Code Playgroud)

当使用此矩形裁剪图像时,您会越界,因为矩形的偏移量为一个像素,但与要裁剪的图像大小相同。您可以手动考虑宽度和高度的偏移量,或者,这是我首选的裁剪解决方案,使用cv::Range

使用范围,您可以定义行和列跨度来执行裁剪:

cv::Range rows(1, 64);
cv::Range cols(1, 67);
Mat rez = src(rows, cols);
Run Code Online (Sandbox Code Playgroud)