OpenCV cv::Mat.type() 以及各类型数据转换
一、cv::Mat的类型有30种,预定义的enum 0-30分别如下
图转自http://blog.csdn.net/hyqsong/article/details/46367765
二、type由depth和channel组成,depth 由.depth()返回的enum有以下这些
enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };
例如CV_8U代表8位unsigned int , CV_16S代表16位short
.channels()返回结果是几就代表是几通道的
三、src.convertTo(dst, CV_8UC1)这个函数,只能进行depth的转换,不能转换通道。
例如src是CV_8UC3,执行上面这个函数之后的dst,依然是CV_8UC3,而不会变为CV_8UC1,注意,此时仅为数据截断。
CV_16U->CV_8U dst.convertTo(src, CV_8U, 1/257.0) ,这里使用257而不是256是为了结果<=255保障不越界
如果是32F或64F转换,则
double maxVal = 0; double minVal = 0; cv::minMaxLoc(image_mat, &minVal, &maxVal); scale = 255.0 / (maxVal - minVal); shift = -255.0*minVal / (maxVal - minVal); image_mat.convertTo(image_mat, CV_8U, scale, shift);
先使用minMaxLoc获取最大最小值,然后按比例缩放偏移
四、要改变通道数,要使用 cv::cvtColor(src, dst, COLOR_BGR2GRAY); 3通道就转化成了单通道
Mat_<uchar>---------CV_8U
Mat<char>-----------CV_8S
Nat_<short>---------CV_16S
Mat_<ushort>--------CV_16U
Mat_<int>-----------CV_32S
Mat_<float>----------CV_32F
Mat_<double>--------CV_64F
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2016-02-18 android ContentResolver详解
2016-02-18 Android-MediaProvider数据库模式