我正在编写一个采用 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;
}
有没有一种干净的方法来做到这一点?
最佳答案
这是因为您通常对图像处理的性能要求很高,因此需要针对 8bit、16bit 或双图像类型使用不同的算法。
您可以使用模板化类型来完成这一切,但这通常只是一种可读性较差的 switch 语句方式。
ps 如果你确实关心性能你不应该使用 .at<> 运算符,使用 .ptr() 获取指向行开头的指针,然后以你拥有的任何像素类型为单位进行步进
关于c++ - OpenCV 类型独立图像访问的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7826354/