图片在网络传输一般将图片信息转存到一个字符数组的buffer,使用Opencv处理的话需要转换成Mat格式,找到参考方法如下:
Mat转换成char
char* 转换为Mat
https://blog.csdn.net/u010185765/article/details/94568783
int main() {
Mat img = imread("1.png");
imshow("1", img);
char* imgdata = new char[img.rows*img.cols*img.channels()];
for (int i = 0; i < img.rows; i++)
{
unsigned char *data = img.ptr<unsigned char>(i);
for (int j = 0; j < img.cols * 3; j++)
{
imgdata[i * img.cols * 3 + j] = data[j];
//std::cout << (int)data[j] << " ";
}
}
cv::Mat Image(img.rows, img.cols, CV_8UC3, imgdata);
imshow("2", Image);
waitKey(0);
return 0;
}
读取一个一维数据转换成Mat格式,
#include<iostream>
#include<opencv2/opencv.hpp>
#include<fstream>
using namespace std;
using namespace cv;
int main() {
char* buffer = new char[6220800+1];
FILE *fptr = fopen("BGR.bgr", "rb");
if (fptr == NULL) {
fprintf(stderr, "cannot read file %s","RGB.bgr");
exit(1);
}
fseek(fptr, 0, SEEK_END);
int len = ftell(fptr);
rewind(fptr);
fread(buffer, len, 1, fptr);
fclose(fptr);
Mat img_RGB(1080,1920, CV_8UC3, buffer);
imshow("RGB", img_RGB);
waitKey(0);
return 0;
}