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函数使用双线性插值缩小图像到长宽大小一半时速度飞快(比最近邻还快)之异象解析和自我实现。

图像识别入门3 图像的缩放和旋转

将图像添加到 ImageList 后编译错误 RG0000(“格式不正确”)

OpenCV入门指南第二篇 缩放图像

图像缩略图设置不正确

[转]opencv3 图像处理 之 图像缩放( python与c++实现 )