webentwicklung-frage-antwort-db.com.de

Wie kann ich ein Bild in OpenCV auf eine bestimmte Größe skalieren?

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

Die Größe des Quellbilds unterscheidet sich jedoch von img.

Gibt es eine opencv-Funktion, um die Größe der Variable img zu ändern?

29
Milad R

Sie können cvResize verwenden. Oder verwenden Sie besser die C++ - Schnittstelle (z. B. cv::Mat anstelle von IplImage und cv::imread anstelle von cvLoadImage), und verwenden Sie dann cv::resize, der die Speicherzuordnung und die Freigabe selbst übernimmt.

39
Mohammad

Die zwei Funktionen, die Sie benötigen, sind hier dokumentiert:

  1. imread : ein Bild von der Festplatte lesen. 
  2. Bildgröße ändern : Größe beliebig ändern.

Zusamenfassend:

// 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());

Hören Sie bitte auf, die alten und vollständig veralteten IplImage * -Klassen zu verwenden

33
Régis B.

Zu Ihrer Information ist das Python-Äquivalent:

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

Machen Sie eine nützliche Funktion wie diese:

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
William

Sie können CvInvoke.Resize für Emgu.CV 3.0 verwenden.

z.B 

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

Details sind hier