OpenCV uchar和Mat之间的相互转换

Posted ybqjymy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于OpenCV uchar和Mat之间的相互转换的主要内容,如果未能解决你的问题,请参考以下文章

cv::mat与unsigned char*相互转化之间的转换

当我想将 IpLmage 转换为 mat、opencv 时遇到了一些错误

QImage 与 cv::Mat 之间的相互转换

OpenCV矩阵与Eigen矩阵相互转换

OpenCV中IplImage和Mat间的相互转换

unsigned char ** 到 opencv mat