如何获得独立于 cv::Mat 类型的像素值?

How to make getting a pixel value independent of the cv::Mat type?

我正在编写一个使用 OpenCV (C++) 的方法。 例如

void foo(const cv::Mat &image);

里面需要按行列取cv::Mat的像素值

如果该方法适用的图像类型是CV_32FC3,我需要使用

image.at<cv::Vec3f>(row, col);

如果类型是CV_32SC2,我需要使用

image.at<cv::Vec2i>(row, col);

如果类型是CV_8UC1,我需要用

image.at<uchar>(row, col);

等等

我希望该方法具有通用性,也就是说,它适用于具有任意数量通道和深度的图像。可以做些什么来满足这个要求(任何模板逻辑)?也许解决方案很明显,但我没有找到。

谢谢!

放弃使用 cv::Mat - 你必须调用 type() 方法(在运行时)来获取 mat 存储的值的类型,而只是开始使用 mat 的模板化版本class: 是cv::Mat_<Type>,写更通用的代码。

那你可以只写一个读取mat像素的函数模板:

template<class T>
T access(cv::Mat_<T> const& img, int r, int c) {
    return img(r,c);
}

更多关于 cv::Mat_ here