OpenCV uchar和Mat之間的相互轉換


這里的輸入圖像是.png類型的原圖像,3通道圖像,親測無誤。

 1 #include "pch.h"
 2 #include <iostream>
 3 #include <opencv2/opencv.hpp>
 4 #include <opencv2/imgproc/types_c.h>
 5 using namespace std;  6 using namespace cv;  7  
 8 /** 圖像的寬度*/
 9 const int img_width=60; 10  
11 /**圖像的高度*/
12 const int img_height = 60; 13  
14 /**數組,存放圖片大小*/
15 uchar p1[img_width * img_height * 3]; 16  
17 /**定義一個數組存放matToUchar的返回值*/
18 uchar *p = new uchar[img_width * img_height * 3]; 19  
20 /**將uchar類型的轉換為Mat類型*/
21 Mat ucharToMat(uchar *p2) 22 { 23  Mat img(Size(img_width, img_height),CV_8UC3); 24     for (int i = 0; i < img_width * img_height * 3; i++) 25  { 26         img.at<Vec3b>(i / (img_width * 3), (i % (img_width * 3)) / 3)[i % 3] = p2[i]; 27  } 28     return img; 29 } 30  
31 /**將Mat類型的數據轉換為uchar類型*/
32 uchar* matToUchar(Mat img) 33 { 34     for (int i = 0; i < img_width * img_height * 3; i++) 35  { 36         p1[i]= (uchar)img.at<Vec3b>(i / (img_width * 3), (i % (img_width * 3)) / 3)[i % 3]; 37  } 38     return p1; 39 } 40  
41 int main() 42 { 43  
44     /**讀入的原圖像*/
45     Mat img2 = imread("d:/test/new/70.png"); 46     p=matToUchar(img2); 47     /**下面這兩行代碼目的是輸出Mat轉化為uchar的值是否正確 48  @(int)目的是將uchar類型的數據轉換為int可以直觀的看到, 49  uchar的數據輸出的是亂碼 50     */
51     for (int i = 0; i < img_width * img_height * 3; i++) 52         cout << (int)p[i] << endl; 53     Mat img = ucharToMat(p); 54     imshow("img",img); 55     waitKey(0); 56     return 0; 57 }

 


免責聲明!

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



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