unsigned char数组与IplImage、Mat之间互相转换

Mat input_image;
unsigned char* input = new unsigned char[input_image.rows * input_image.cols];	//这里假设是单通道的,如果不是,需要乘以input_image.channels()

//将unsigned char数组转换为IplImage*,并显示
IplImage* image = cvCreateImageHeader(cvSize(input_image.cols,input_image.rows), IPL_DEPTH_8U, input_image.channels()); 
image->origin = ~image->origin; 
cvSetData(image, input, input_image.cols * input_image.channels());  
cvNamedWindow("window-1");   
cvShowImage("window-1", image);		//这里显示出来的图像是倒着的

//将unsigned char数组转换为Mat,并显示
Mat output_image(input_image.rows, input_image.cols, input_image.type(),input);
imshow("output_image",output_image);	//这里显示出来的图像是正的

//将IplImage*转换为unsigned char数组
IplImage* image;
int image_size = image->width * image->height;
unsigned char* output = new unsigned char[image_size];	//或unsigned char* output = (unsigned char*)malloc(sizeof(unsigned char) * image_size);
memcpy(output, image->imageData, image_size);

//将Mat转换为unsigned char数组
int image_size = input_image.cols * input_image.rows;
unsigned char* output = new unsigned char[image_size];	//或unsigned char* output = (unsigned char*)malloc(sizeof(unsigned char) * image_size);
memcpy(output, input_image.data, image_size);

猜你喜欢

转载自blog.csdn.net/mj412828668/article/details/84821170