C++ 如何在 OpenCV 中将图像调整为特定大小?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11678527/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to resize an image to a specific size in OpenCV?
提问by Milad R
IplImage* img = cvLoadImage("something.jpg");
IplImage* src = cvLoadImage("src.jpg");
cvSub(src, img, img);
But the size of the source image is different from img.
但是源图像的大小与img.
Is there any opencv function to resize it to the imgsize?
是否有任何 opencv 函数可以将其调整为img大小?
回答by Mohammad
You can use cvResize. Or better use c++ interface (eg cv::Matinstead of IplImageand cv::imreadinstead of cvLoadImage) and then use cv::resizewhich handles memory allocation and deallocation itself.
您可以使用cvResize. 或者更好地使用 c++ 接口(例如cv::Mat代替IplImage和cv::imread代替cvLoadImage),然后使用cv::resizewhich 处理内存分配和释放本身。
回答by Régis B.
The two functions you need are documented here:
此处记录了您需要的两个功能:
- imread: read an image from disk.
- Image resizing: resize to just any size.
In short:
简而言之:
// 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());
And please, please, stop using the old and completely deprecated IplImage* classes
并且请,请停止使用旧的和完全弃用的 IplImage* 类
回答by Alexandre Mazel
For your information, the python equivalent is:
供您参考,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 )
回答by LovaBill
Make a useful function like this:
做一个像这样的有用函数:
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;
}

