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

时间:2012-07-26 21:47:33

标签: c++ opencv image-resizing

IplImage* img = cvLoadImage("something.jpg");
IplImage* src = cvLoadImage("src.jpg");
cvSub(src, img, img);

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

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

5 个答案:

答案 0 :(得分:39)

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

答案 1 :(得分:34)

这里记录了您需要的两个功能:

  1. imread:从磁盘读取图像。
  2. Image resizing:调整为任意大小。
  3. 简而言之:

    // 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 *类

答案 2 :(得分:10)

有关您的信息,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 )

答案 3 :(得分:6)

制作一个有用的功能:

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;
} 

答案 4 :(得分:0)

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

例如

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

详情为here