cvResize后的incorrected图像

时间:2016-08-03 08:57:22

标签: c++ image opencv

在我的工作中,我使用OpenCV 2.4.6通过cvResize()调整图像大小。 我注意到函数对某些图像分辨率进行了不正确的转换。例如,

图片782x716:here

转换为640x480后,我得到的图像不正确: enter image description here

图片780x716:here 为此,我得到一个正常的图像640x480: enter image description here

我的代码:

  

void ScaleBufOpenCV(BYTE * in,B​​YTE * out,int inX,int inY,int outX,int outY,int nResizeNumber)   {

IplImage Src_img;
cvInitImageHeader( &Src_img, cvSize(inX, inY), IPL_DEPTH_8U, 3 );
cvSetData( &Src_img, (char*)in, inX*3 );

IplImage Dst_img;
cvInitImageHeader( &Dst_img, cvSize(outX, outY), IPL_DEPTH_8U, 3 );
cvSetData( &Dst_img, (char*)out, outX*3 );

cvResize (&Src_img, &Dst_img, nResizeNumber);
cvSaveImage("d:\\1.jpg", &Dst_img);

}

其中,

  • in - 源图像的输入缓冲区
  • out - 目标图像的输出缓冲区
  • inX,inY - 输入图像的大小
  • outX,outY - 输出图像的大小,总是等于640x480
  • nResizeNumber - 插值方法,总是等于1

想法?

2 个答案:

答案 0 :(得分:0)

IplImage是OpenCV的C接口的一部分,我建议使用Mat建议(C ++结构)。然后,您可以使用cv::resize(mat_to_resize, mat_resized, Size(640,480), 1.0, 1.0, INTER_CUBIC);

轻松调整图片大小

答案 1 :(得分:0)

奇怪,改变

cvSetData( &Src_img, (char*)in, inX*3 );

on

Src_img.imageData = (char*)in;

效果很好!