在我的工作中,我使用OpenCV 2.4.6通过cvResize()调整图像大小。 我注意到函数对某些图像分辨率进行了不正确的转换。例如,
图片782x716:here
图片780x716:here 为此,我得到一个正常的图像640x480:
我的代码:
void ScaleBufOpenCV(BYTE * in,BYTE * 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);
}
其中,
想法?
答案 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;
效果很好!