我正在编写一个使用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_
的信息 这里.