cvResize 后图像不正确
Posted
技术标签:
【中文标题】cvResize 后图像不正确【英文标题】:Incorrected image after cvResize 【发布时间】:2016-08-03 08:57:21 【问题描述】:在我的工作中,我使用 OpenCV 2.4.6 通过 cvResize() 调整图像大小。 我注意到该函数对某些图像分辨率不正确进行了转换。例如,
图像 782x716:here
转换为 640x480 后,我得到一个不正确的图像:
图像 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);
在哪里,
in - 源图像的输入缓冲区 out - 目标图像的输出缓冲区 inX, inY - 输入图像的大小 outX, outY - 输出图像的大小,总是等于 640x480 nResizeNumber - 插值方法,总是等于 1想法?
【问题讨论】:
你为什么不改用cv::Mat()
?
我想使用 C 函数,因为有一个大的遗留项目
【参考方案1】:
IplImage
是 OpenCV 的 C 接口的一部分,我建议按照建议使用Mat
(C++ 结构)。然后您可以使用cv::resize(mat_to_resize, mat_resized, Size(640,480), 1.0, 1.0, INTER_CUBIC);
轻松调整图像大小
【讨论】:
我做不到。大型遗留项目中使用了opencv的C接口。【参考方案2】:奇怪,改变
cvSetData( &Src_img, (char*)in, inX*3 );
在
Src_img.imageData = (char*)in;
效果很好!
【讨论】:
以上是关于cvResize 后图像不正确的主要内容,如果未能解决你的问题,请参考以下文章
短道速滑一OpenCV中cvResize函数使用双线性插值缩小图像到长宽大小一半时速度飞快(比最近邻还快)之异象解析和自我实现。