打开CV通用Mat函数头

nbu*_*bis 5 c++ templates opencv

在OpenCV中,访问Mat对象中的像素是很常见的,如下所示:

float b = A.at<float>(4,5);
Run Code Online (Sandbox Code Playgroud)

问题是,如果你不知道apriori的数据类型,你就会陷入困境.有没有办法编写接受Mat模板类型的通用函数头T?我想构建线性代数计算的函数,我不希望有一个if子句分离doublefloat.就像是:

 void func(Mat <T> a) { 
     a.at<T>(3,4) = ...
Run Code Online (Sandbox Code Playgroud)

这在OpenCV中是否可行?

zak*_*ter 1

只需对您的函数进行模板化即可实现这一点:

template<typename T>
void func(Mat a) { 
    a.at<T>(3,4) = ...
Run Code Online (Sandbox Code Playgroud)

但请注意,您没有简单的方法将类型 T 限制为 double 或 float,并且您的算法可能不适用于其他类型,但这可能不是一个实际问题。

还要注意使用模板的缺点:使用模板的缺点是什么?