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

标签 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;
}

有没有一种干净的方法来做到这一点?

最佳答案

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

您可以使用模板化类型来完成这一切,但这通常只是一种可读性较差的 switch 语句方式。

ps 如果你确实关心性能你不应该使用 .at<> 运算符,使用 .ptr() 获取指向行开头的指针,然后以你拥有的任何像素类型为单位进行步进

关于c++ - OpenCV 类型独立图像访问的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7826354/

相关文章:

二十一点程序中体系结构 x86_64 的 C++ undefined symbol

c - Linux 内核中变量名后 *const* 的扭曲用法

opencv - 使用Opencv从相机获取部分图像

OpenCV 空间匹配(Beyond Bags of Featues,Lazebnik)

c++ - 字符串 'G' 未显示

c++ - 如何从gtkmm TreeView 获取选定的行

c - 打印字符串的组合

opencv - 如何从 DrawMatches() 方法返回的 Mat 对象中分离查询和训练图像

c++ - 预编译头的原始文件名

c - 在 C 中打印一个空的二维数组