如何获得独立于 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。
我正在编写一个使用 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。