web-dev-qa-db-ja.com

OpenCVで特定のサイズに画像のサイズを変更する方法は?

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

ただし、ソースイメージのサイズはimgとは異なります。

imgサイズにサイズを変更するopencv関数はありますか?

29
Milad R

cvResize を使用できます。または、C++インターフェース(_cv::Matの代わりにIplImageおよびcv::imreadの代わりにcvLoadImage)を使用し、cv::resizeこれは、メモリの割り当てと割り当て解除自体を処理します。

39
Mohammad

必要な2つの機能はここに文書化されています。

  1. imread :ディスクからイメージを読み取ります。
  2. 画像のサイズ変更 :任意のサイズに変更します。

要するに:

// 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 *クラスの使用をやめてください。

34
Régis B.

参考までに、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 )
10
Alexandre Mazel

次のような便利な関数を作成します。

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

CvInvoke.ResizeにはEmgu.CV 3.0を使用できます

例えば

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

詳細は こちら