OpenCV类型独立图像访问的最佳方式?

时间:2011-10-19 18:39:42

标签: c++ c opencv

我正在编写一个采用OpenCV Mat结构并进行一些处理的函数。问题是OpenCV似乎没有一种类型独立的方式来访问结构,所以我必须做这样的事情。

int myfunc(cv::Mat& im, int iRow, int iCol)
{
    int iResult = 0; 
    if (im.type()==CV_16U) iResult = (int)im.at<unsighed short>(iRow, icol);
    else if (im.type()==CV_8U) iResult = (int)im.at<uchar>(iRow, icol);

    return iResult;
}

有干净的方法吗?

2 个答案:

答案 0 :(得分:1)

这是因为您通常需要高性能的图像处理,因此需要针对8位,16位或双图像类型的不同算法。

你可以使用模板化类型完成所有操作,但这通常只是一种不太可读的方式来使用switch语句。

ps如果您关心性能,则不应使用.at&lt;&gt;运算符,使用.ptr()获取指向行首的指针,然后以您拥有的任何像素类型为单位进行步骤

答案 1 :(得分:0)

我发现这样做的唯一方法是使用模板MatMat_

因此,对于您的示例,您可以尝试以下内容:

template<class T>
T myfunc(cv::Mat_<T>& im, int iRow, int iCol)
{
    return im(iRow, iCol);
}

希望有所帮助!