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——通道數

S——signed int(有符號整型)

【范圍與默認值】

CV_8U——0~255,205
CV_8S——0~255,-51
CV_32S——int型的范圍,-842150451
CV_32F——浮點型的范圍,-431602080

對於圖像,顯示范圍整數0~255,小數0~1.0,所以float類型先將圖像歸一化,normalize(d, d, 1.0, 0.0, NORM_MINMAX)再顯示。

默認值查看方式:

    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; //轉int正常顯示

彩色圖:

cout<<img.at<Vec3b>(row,col)<<endl; //b、g、r三元素的向量,Vec3b參考我的另一篇博客

cout<<(int)img.at<Vec3b>(row,col)[0]<<endl; //b的值

【格式轉換】

    Mat data1(3, 3, CV_8S);
    Mat data2;
    data2.convertTo(data2, CV_32F);
    cout << data1 << endl;
    cout << data2 << endl;

高精度往低精度轉換要注意范圍。

【多余的話】

1、Mat里元素類型為什么是uchar?

節省空間 https://www.cnblogs.com/happyamyhope/p/7244538.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM