如何在 OpenCV 中将图像调整为特定大小?

Posted

技术标签:

【中文标题】如何在 OpenCV 中将图像调整为特定大小?【英文标题】:How to resize an image to a specific size in OpenCV? 【发布时间】:2012-07-26 21:47:32 【问题描述】:
IplImage* img = cvLoadImage("something.jpg");
IplImage* src = cvLoadImage("src.jpg");
cvSub(src, img, img);

但源图片的大小与img不同。

是否有任何 opencv 函数可以将其调整为 img 大小?

【问题讨论】:

【参考方案1】:

您可以使用cvResize。或者更好地使用 c++ 接口(例如 cv::Mat 代替 IplImagecv::imread 而不是 cvLoadImage)然后使用 cv::resize 处理内存分配和释放本身。

【讨论】:

谢谢。我在很多关于 opencv 的主题中看到了 cv::Mat,但我不知道它是什么。我在哪里可以找到一些关于它的信息(尤其是基本信息),以及你说的相关功能?【参考方案2】:

这里记录了您需要的两个函数:

    imread:从磁盘读取图像。 Image resizing:调整为任意大小。

简而言之:

// Load images in the C++ format
cv::Mat img = cv::imread("something.jpg");
cv::Mat src = cv::imread("src.jpg");

// Resize src so that is has the same size as img
cv::resize(src, src, img.size());

请,请停止使用旧的和完全弃用的 IplImage* 类

【讨论】:

【参考方案3】:

供您参考,python 等价物是:

imageBuffer = cv.LoadImage( strSrc )
nW = new X size
nH = new Y size
smallerImage = cv.CreateImage( (nH, nW), imageBuffer.depth, imageBuffer.nChannels )
cv.Resize( imageBuffer, smallerImage , interpolation=cv.CV_INTER_CUBIC )
cv.SaveImage( strDst, smallerImage )

【讨论】:

【参考方案4】:

像这样创建一个有用的函数:

IplImage* img_resize(IplImage* src_img, int new_width,int new_height)

    IplImage* des_img;
    des_img=cvCreateImage(cvSize(new_width,new_height),src_img->depth,src_img->nChannels);
    cvResize(src_img,des_img,CV_INTER_LINEAR);
    return des_img;
 

【讨论】:

注意 des_img 的所有权。最好使用智能指针或 OpenCV C++ 接口。 直接回答问题。非常感谢! 我的荣幸。总是乐于尽我所能做出贡献。【参考方案5】:

您可以将CvInvoke.Resize 用于Emgu.CV 3.0

例如

CvInvoke.Resize(inputImage, outputImage, new System.Drawing.Size(100, 100), 0, 0, Inter.Cubic);

详情here

【讨论】:

以上是关于如何在 OpenCV 中将图像调整为特定大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在opencv python中调整PNG图像的大小? [复制]

如何将 UIImage 调整为特定大小

在 Visual Studio 中调整 mat openCV 的大小

如何使用 VBA 在 Word 中将多个图像裁剪为相同大小,同时使其适合其容器形状

如何在 OpenCV 中将图像读取为双倍?

如何在opencv中将图像转换为矩阵[重复]