我希望将从网络摄像头捕获的图像分成N*N个小方块,以便可以单独处理这些小方块。
你需要使用 OpenCV 图像结构的 ROI(感兴趣区域)选项。在 C 接口中,你需要一个名为 cvSetImageROI 的函数;在 C++ 中,它将是 cv::Mat
类的 operator()。这里是一个简单的 C++ 示例,用于按照 NxN 块处理图像:
cv::Mat img;
capture >> img;
for (int r = 0; r < img.rows; r += N)
for (int c = 0; c < img.cols; c += N)
{
cv::Mat tile = img(cv::Range(r, min(r + N, img.rows)),
cv::Range(c, min(c + N, img.cols)));//no data copying here
//cv::Mat tileCopy = img(cv::Range(r, min(r + N, img.rows)),
//cv::Range(c, min(c + N, img.cols))).clone();//with data copying
//tile can be smaller than NxN if image size is not a factor of N
your_function_processTile(tile);
}
C版本:
IplImage* img;
CvRect roi;
CvSize size;
int r, c;
size = cvGetSize(img);
for (r = 0; r < size.height; r += N)
for (c = 0; c < size.width; c += N)
{
roi.x = c;
roi.y = r;
roi.width = (c + N > size.width) ? (size.width - c) : N;
roi.height = (r + N > size.height) ? (size.height - r) : N;
cvSetImageROI(img, roi);
processTile(img);
}
cvResetImageROI(img);