如何使获取像素值独立于 cv::Mat 类型?



我正在编写一个使用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 类的模板化版本:它是cv::Mat_<Type>并编写更通用的代码。

然后,您可以只编写一个函数模板来读取垫子像素:

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

更多关于cv::Mat_的信息 这里.

最新更新