OpenCV中多维cv :: Mat的多维ROI

时间:2014-08-06 18:47:04

标签: c++ opencv multidimensional-array roi

我在C ++中使用OpenCV在图像上创建一个多维垫(用作累加器)。

我像这样创建了3d累加器:

const int accumSize[] = {sx, sy, sr};
cv::Mat accum(3, accumSize, CV_64F, cv::Scalar::all(0));

我需要从此累加器中提取n*n*n投资回报率,以便我可以使用cv::minMaxIdx在每个投资回报率中获得最大值。

由于这是3d,因此使用cv::Rect获取ROI的常用方法不起作用。也不是:

accum(cv::Range(x1,x2), cv::Range(y1,y2), cv::Range(r1,r2));

任何人都知道如何轻松获取3d子矩阵而无需显式分配并逐个元素复制?

2 个答案:

答案 0 :(得分:1)

您可以使用()运算符,但是您需要提供一系列范围,如下所示:

cv::Range ranges[3];
ranges[0] = cv::Range(x1, x2);
ranges[1] = cv::Range(y1, y2);
ranges[2] = cv::Range(z1, z2);

accum(ranges)

答案 1 :(得分:-1)

我们假设您正在使用n个频道,每个频道都有一个a x b的矩阵。合并这些渠道以创建Mat depth = nsize = a x b的新vector<Mat> channels; // populate this vector with number of channels you desire Mat mergedChannels, croppedChannels; Rect roi(x1, y1, x2-x1, y2-y1); merge(channels, mergedChannels); croppedChannels = mergedChannels(roi); printf("%d %d %d\n", croppedChannels.cols, croppedChannels.rows, croppedChannels.channels()); 。使用Rect来定义和裁剪ROI。

{{1}}