微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

opencv Mat数据类型转换和算法

如何解决opencv Mat数据类型转换和算法

| 我是opencv库的新手,但从2.x开始,我仍然对C ++ Mat类感到困惑。 我面临的问题: Mat的非模板版本是运行时类型的,但是没有函数可以显示Mat对象的符号名称,只有一个
cv::Mat::type()
,它返回整数。 如果矩阵是CV_8U或无符号字符类型,那么我会做加法运算...它是否有可能引起溢出?还是opencv足够聪明,可以转换数据类型,是否称为“饱和算术”?例如
unsigned char a = 255; unsigned char b = a+a; // == 255
a + a的操作:
unsigned char b = (unsigned char) clipTo_0_255((float)a + (float)a));
如果我想避免细微的
cv::Mat::at<_Tp>
,大多数解决方案建议使用衍生的模板版本
class Mat_<_Tp>
。但是_Tp必须是C ++基本类型,我不知道基本类型和CvMat类型系统之间的映射...(也许很简单...) opencv数据类型转换是否等效于C / C ++类型转换?例如
float a = 1.5; int b = (int) a; // == 1
int a = 2; float b = static_cast<int>(a); // == 2.0
    

解决方法

对于#2和#4,您都应该阅读有关饱和算法的OpenCV页面。特别是:   这种“饱和”语义(不同   从通常的C语言“包装”   语义,其中最低位是   拍摄,在每个图像中都实现   从简单的处理功能   
cv::add
cv::cvtColor
cv::resize
,   
cv::filter2D
等。这不是新的   OpenCV v2.x的功能,它在那里   从一开始。在新   版本此特殊模板运算符   介绍以简化   该语义的实现   您自己的功能。 不幸的是,对于您的类型系统问题,我没有很好的解决方案。因为所有OpenCV库函数都使用非模板的
cv::Mat
类,所以我个人放弃了使用
cv::Mat<T>
类,直到更新了API的其余部分。 虽然类型系统相当笨拙,但随着您习惯它,使用起来变得容易得多。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。