//cv::Mat转char
方法1
cv::Mat img = cv::imread("E:\\Data\\2.bmp", 1);
cv::imshow("1", img);
char* imgdata = new char[1024 * 2048*3];
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(1024, 2048, CV_8UC3, imgdata);
方法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
float_image.convertTo(integer_image, CV_16U, 1.0);