我通过C ++接口使用opencv。我有cv::Mat m1
表示多通道图像,我需要从中获取单个通道图像m2
,其中像素的值为{{1}中相应像素的所有值中的最大值(m1
中的一个像素有多个值,每个通道一个)。有人知道从m1
获取m2
的最有效方法吗?
答案 0 :(得分:2)
您可以使用cv::reduce()
和Mat::reshape()
来完成此操作。关键是将m1
重塑为单通道图像,其中行的每个元素代表一个颜色分量。您可以通过m1.reshape(1, m1.total())
执行此操作。然后应用reduce()
将给出包含最大组件值的Mat
,然后将结果重新整形为m1
的形状是一件简单的事情。一个简单的例子如下:
uchar data[] = {1,2,3, 3,1,2, 2,1,3, 3,2,1};
cv::Mat m1(2,2, CV_8UC3, data); // Maximum component value is 3 for all pixels
cv::Mat m2;
cv::reduce(m1.reshape(1, m1.total()), m2, 1, CV_REDUCE_MAX);
m2 = m2.reshape(0, m1.cols); // 2x2 Mat, all elements are 3