如何在 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
代替 IplImage
和 cv::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图像的大小? [复制]
在 Visual Studio 中调整 mat openCV 的大小