我正在编写一个采用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;
}
有干净的方法吗?
答案 0 :(得分:1)
这是因为您通常需要高性能的图像处理,因此需要针对8位,16位或双图像类型的不同算法。
你可以使用模板化类型完成所有操作,但这通常只是一种不太可读的方式来使用switch语句。
ps如果您关心性能,则不应使用.at&lt;&gt;运算符,使用.ptr()获取指向行首的指针,然后以您拥有的任何像素类型为单位进行步骤
答案 1 :(得分:0)
我发现这样做的唯一方法是使用模板Mat
类Mat_。
因此,对于您的示例,您可以尝试以下内容:
template<class T>
T myfunc(cv::Mat_<T>& im, int iRow, int iCol)
{
return im(iRow, iCol);
}
希望有所帮助!