Mat中的元素类型(如CV_8U)、范围、获取、格式转换
一般使用的灰度圖像元素是8位的uchar型(注意不是無符號整型,而是無符號字符型。元素值0~255),自定義Mat矩陣時,推薦使用8位無符號字符型,即CV_8U、CV_8UC3。
再說一遍,條件反射式的記住:一般見到的Mat的元素是8位無符號字符型,不是8位無符號整型。
【元素類型】
CV_8U(即CV_8UC1)、CV_8UC3、CV_32S、CV_32F等,16、64位用的少本文不討論。
U——usigned char(無符號字符型,不是無符號整型)
C——通道數(shù)
S——signed int(有符號整型)
【范圍與默認(rèn)值】
CV_8U——0~255,205
CV_8S——0~255,-51
CV_32S——int型的范圍,-842150451
CV_32F——浮點(diǎn)型的范圍,-431602080
對于圖像,顯示范圍整數(shù)0~255,小數(shù)0~1.0,所以float類型先將圖像歸一化,normalize(d, d, 1.0, 0.0, NORM_MINMAX)再顯示。
默認(rèn)值查看方式:
Mat data(3, 3, CV_32F);
cout << data << endl;
【具體元素的獲取】用.at()
.at()<類型>(行,列),中類型要與Mat中元素類型一致。注意行、列是從0索引開始的。所以2行3列處得寫成.at()<類型>(1,2)
灰度圖:cout<<(int)gray.at<uchar>(row,col)<<endl; //轉(zhuǎn)int正常顯示
彩色圖:
cout<<img.at<Vec3b>(row,col)<<endl; //b、g、r三元素的向量,Vec3b參考我的另一篇博客
cout<<(int)img.at<Vec3b>(row,col)[0]<<endl; //b的值
【格式轉(zhuǎn)換】
Mat data1(3, 3, CV_8S);
Mat data2;
data2.convertTo(data2, CV_32F);
cout << data1 << endl;
cout << data2 << endl;
高精度往低精度轉(zhuǎn)換要注意范圍。
【多余的話】
1、Mat里元素類型為什么是uchar?
節(jié)省空間https://www.cnblogs.com/happyamyhope/p/7244538.html
總結(jié)
以上是生活随笔為你收集整理的Mat中的元素类型(如CV_8U)、范围、获取、格式转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu下安装Pycharm及相关设
- 下一篇: 逍遥情缘辅助职业介绍 辅助职业有什么用