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;
}
有没有一种干净的方法来做到这一点?
I am writing a function that takes a OpenCV Mat structure and does some processing. The problem is that OpenCV doesn't seem to have a type independent way for accessing the strucutre so I have to do something like this.
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;
}
Is there a clean way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是因为您通常需要高性能的图像处理,因此需要针对 8 位、16 位或双图像类型使用不同的算法。
您可以使用模板化类型来完成这一切,但这通常只是一种可读性较差的 switch 语句方式。
ps 如果您确实关心性能,则不应使用 .at<>运算符,使用 .ptr() 获取指向行开头的指针,然后以您拥有的任何像素类型为单位进行步进
It's because you generally require high performance in image processing and so need different algorithms for 8bit, 16bit or double image types.
You can do it all with templated types but that's often just a less readable way of having a switch statement.
ps if you do care about performance you shouldn't be using the .at<> operator, get a pointer to the start of the line with .ptr() and then step in units of whatever pixel type you have
我发现做到这一点的唯一方法是使用模板化的
Mat
类 Mat_。因此,对于您的示例,您可以尝试如下操作:
希望有帮助!
The only way I have found to do this is to use the templated
Mat
class Mat_.So, for your example, you might try something like the following:
Hope that helps!