1,Mat转换成charint 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;}
方法2 (耗时最短,200us)
//单通道 cv::Mat Image = cv::imread("E:\\Data\\2.bmp", 1);
char * pBuffet = new char[Image.cols * Image.rows];
if (Image.isContinuous())
{
memcpy(pBuffet, Image.data, Image.cols*Image.rows); }
else
{
for (int i = 0; i < Image.rows; ++i)
{
memcpy(pBuffet, Image.ptr<uchar>(i), Image.cols);
}
}
//三通道
cv::Mat Image = cv::imread("E:\\Data\\2.bmp", 1);
char * pBuffet = new char[Image.cols * Image.rows*3];
if (Image.isContinuous())
{
memcpy(pBuffet, Image.data, Image.cols*Image.rows*3);
}
else
{
for (int i = 0; i < Image.rows; ++i)
{
memcpy(pBuffet, Image.ptr<uchar>(i), Image.cols*3);
}
}
//Byte *转Mat图像
BYTE* pImageRGBInfo = new BYTE[BUFF_SIZE_IMAG + 1];
cv::Mat Image = cv::Mat(480, 640, CV_8UC3, pImageRGBInfo);
CV_8U转换成CV_16U
|