OpenCV3編程入門第4章-學習筆記1-圖像容器Mat詳解

      網友投稿 1043 2025-04-02

      圖像容器Mat

      一幅圖片(數字圖像)是一個像素點矩陣

      剛開始的OpenCV,一直是C語言,也就是需要手動管理內存,必須release掉,否則會內存泄露

      2.0時代以后,引入了C++類概念,廣義上可以自動內存管理

      Mat類:(1)不必手動開辟空間(2)不必再不需要時立即釋放空間

      Mat類由兩部分數據組成:

      矩陣頭(矩陣尺寸+存儲方法+存儲地址)

      指向存儲所有像素值得矩陣的指針

      為了解決傳遞圖像時需要復制矩陣、降低程序的速度等問題,OpenCV使用了引用計數機制。(共享同一矩陣,有各自信息頭)

      Mat A, C;//僅創建信息頭

      A = imread("my.jpg", CV_LOAD_IMAGE_COLOR); //開辟矩陣空間

      Mat B(A); //拷貝構造函數

      《OpenCV3編程入門》第4章-學習筆記1-圖像容器Mat詳解

      C = A; //賦值運算符

      如果要對某個區域進行提取。 也只需要創建包含邊界信息的信息頭

      Mat D(A, Rect(10,10,100,100)); // 使用矩形邊界界定

      Mat E = A(Range:all(), Range(1,3));//使用行和列界定

      如果確實想復制矩陣本身

      Mat F = A.clone();

      Mat G;

      A.copyTo(G);

      像素值存儲方法

      通常用三個或四個基元素來表示顏色。有時為了表示 透明色,會加入第四個元素alpha(A)

      顏色系統分類:

      RGB, 最常用

      HSV ? ?HLS ?將顏色分為色調、飽和度、亮度/明度

      YCrCb 在 JPEG圖像格式中廣泛使用

      CIE ? ? ?L*a*b* 是一種感知上均勻的顏色空間,用來度量兩個顏色的距離

      創建Mat對象的多種方法

      預備知識:這里解釋下形如CV_8UC3 的意思。

      形如: ?CV_[位數][帶符號與否][類型前綴]C[通道數]

      那么 CV_8UC3 表示使用8位的unsigned char類型,每個像素由三個元素組成三通道。

      /*

      功能:新建Mat類的幾種方法

      */

      #include

      #include

      #include

      #include

      using namespace std;

      using namespace cv;

      int main()

      {

      //方法1:創建無初始化矩陣

      Mat image1;

      //方法二:創建4行6列類型為8位單通道矩陣

      Mat image2(4, 6, CV_8UC1);

      //方法三:創建大小為4×3類型為8位3通道矩陣;為3行4列,每三個數為一組。

      Mat image3(Size(4, 3), CV_8UC3);

      //方法四:創建一個用1+3j填充的2×4復矩陣;為2行4列,每兩個數為一組。

      Mat image4(2, 4, CV_32FC2, Scalar(1, 3));

      //方法五:創建大小為5×3類型為8位3通道矩陣;為3行5列,每三個數為一組。

      Mat image5(Size(5, 3), CV_8UC3, Scalar(1, 2, 3));

      //方法六:將image2賦值給image6,共用數據對象

      Mat image6(image2);

      //方法七:將image2賦值給image6,克隆

      Mat image7 = image2.clone();

      //方法八:將image2賦值給image6,復制。注意:方法六、七、八、這三種復制的方法寫法!!!

      Mat image8;

      image2.copyTo(image8);

      //輸出矩陣結果

      cout << "image1 = " << endl << image1 << endl << endl;

      cout << "image2 = " << endl << image2 << endl << endl;

      cout << "image3 = " << endl << image3 << endl << endl;

      cout << "image4 = " << endl << image4 << endl << endl;

      cout << "image5 = " << endl << image5 << endl << endl;

      cout << "image6 = " << endl << image6 << endl << endl;

      cout << "image7 = " << endl << image7 << endl << endl;

      cout << "image8 = " << endl << image8 << endl << endl;

      //方法1:2x4行,3通道,三通道初值設為(1,2,3)

      Mat img1(2, 4, CV_8UC3, Scalar(1, 2, 3));

      //方法2:創造多維矩陣,指定維數,然后傳遞指向數組指針,包含每個維度尺寸

      //比如創造4維矩陣,每一維分別有2,3,4,5維,這個不能輸出

      int sz[4] = {2,3,4,5};

      Mat img2(4, sz,CV_8UC1 , Scalar::all(0));

      //方法3:為已經存在IplImage指針創建信息頭

      //opencv2.4.9版本

      //IplImage* img3 = cvLoadImage("1.jpg", 1);

      //Mat mtx(img3);

      //opencv3.0.0版本

      IplImage* temp = cvLoadImage("1.jpg", 1);

      Mat img3 = cv::cvarrToMat(temp);

      //方法4:利用Create函數

      Mat img4;

      img4.create(4, 4, CV_8UC(2));

      //方法5:matlab初始化

      Mat img5 = Mat::eye(4, 4, CV_64F);

      Mat img6 = Mat::ones(3, 3, CV_32F);

      Mat img7 = Mat::zeros(2, 2, CV_8UC1);

      //方法6:對小矩陣使用逗號分隔式初始化

      Mat img8 = (Mat_(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);

      //輸出矩陣結果

      cout << "img1 = " << endl << img1 << endl << endl;

      //cout << "img2 = " << endl << img2 << endl << endl;

      cout << "img3 = " << endl << img3 << endl << endl;

      cout << "img4 = " << endl << img4 << endl << endl;

      cout << "img5 = " << endl << img5 << endl << endl;

      cout << "img6 = " << endl << img6 << endl << endl;

      cout << "img7 = " << endl << img7 << endl << endl;

      cout << "img8 = " << endl << img8 << endl << endl;

      system("pause"); //作用:暫停黑窗口,否則窗口一閃而過,看不見信息

      return 0;

      }

      結果如下:

      Image OpenCV

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps一條線怎么畫(wps如何畫一條線)
      下一篇:保護工作表的密碼忘記了怎么取消(怎么撤銷工作表保護密碼忘了)
      相關文章
      妇女自拍偷自拍亚洲精品| 亚洲国产欧洲综合997久久| 亚洲一区精品伊人久久伊人| 国产精品亚洲一区二区在线观看| 97se亚洲国产综合自在线| 亚洲一级毛片免费看| 亚洲不卡中文字幕| 精品亚洲AV无码一区二区| 国产成人亚洲合集青青草原精品| 亚洲中字慕日产2020| 91亚洲精品自在在线观看| 亚洲国产成人精品电影| 精品久久亚洲中文无码| 亚洲精品人成网在线播放影院| 99久久婷婷国产综合亚洲| 亚洲成a人片在线观看精品| 亚洲成a人片在线看| 亚洲欧美日韩国产精品一区| 亚洲精品无播放器在线播放| 亚洲avav天堂av在线网毛片| 男人的天堂亚洲一区二区三区 | 亚洲中文字幕无码av永久| 亚洲国产日韩精品| 亚洲av无码片vr一区二区三区| 亚洲av无码兔费综合| 亚洲国产av无码精品| 久久亚洲AV无码西西人体| 日本亚洲视频在线| 亚洲精品福利视频| 亚洲成a人片在线观看中文!!! | 亚洲小视频在线播放| 久久精品国产亚洲αv忘忧草| 亚洲熟妇av午夜无码不卡 | 老子影院午夜伦不卡亚洲| 亚洲高清视频一视频二视频三| 国产亚洲精久久久久久无码77777 国产亚洲精品成人AA片新蒲金 | 亚洲av永久无码精品网址| 亚洲国产精品丝袜在线观看| 亚洲情综合五月天| 日韩精品亚洲人成在线观看| 亚洲精品无码久久毛片波多野吉衣|