2013-07-08 18 views
6

Ich bin neu bei OpenCV und habe mir das Canny Tutorial zur Kantenerkennung angesehen. Ich war auf der Suche nach einer Größe mat gerade erstellt. Der Code ist dies:Größe einer Matrix ändern, nachdem sie in OpenCV erstellt wurde

src = imread(impath); 
... 
dst.create(src.size(), src.type()); 

jetzt habe ich versucht, die Matte mit dieser, um die Größe:

resize(dst, dst, dst.size(), 50, 50, INTER_CUBIC); 

Aber es scheint, nichts zu ändern.

Meine Zweifel sind zwei: : Bin ich gut tun resize() nach create() Aufruf? : Wie kann ich die Abmessungen des mat angeben?

Mein Ziel ist die Größe des Bildes, wenn es

Antwort

17

Sie erstellen dst Matte mit der gleichen Größe wie src nicht klar war.

Mat src = imread(...); 
Mat dst; 
resize(src, dst, Size(), 2, 2, INTER_CUBIC); // upscale 2x 
// or 
resize(src, dst, Size(1024, 768), 0, 0, INTER_CUBIC); // resize to 1024x768 resolution 

UPDATE: aus der OpenCV Dokumentation:

Skalierung wird Ändern der Größe nur des Bildes auch, wenn Sie anrufen resize Sie beide Zielgröße und fx/fy Skalierungsfaktoren passieren, sollten Sie etwas, das man passieren . OpenCV wird zu diesem Zweck mit einer Funktion cv2.resize() ausgeliefert. Die Größe des Bildes kann manuell angegeben werden, oder Sie können den Skalierungsfaktor angeben. Verschiedene Interpolationsmethoden werden verwendet. Bevorzugte Interpolationsmethoden sind cv2.INTER_AREA für Schrumpfung und cv2.INTER_CUBIC (langsam) cv2.INTER_LINEAR zum Zoomen. Die verwendete Interpolationsmethode ist standardmäßig cv2.INTER_LINEAR für alle Größenänderungszwecke.

import cv2 
import numpy as np 
img = cv2.imread('messi5.jpg') 
res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC) 
#OR 
height, width = img.shape[:2] 
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC) 

Auch in Visual C++ habe ich versucht, beide Methoden zum Schrumpfen und cv::INTER_AREA Arbeiten deutlich schneller als cv::INTER_CUBIC (wie durch OpenCV Dokumentation erwähnt): Sie können einen Eingang Bild entweder von folgenden Methoden die Größe

cv::Mat img_dst; 
cv::resize(img, img_dst, cv::Size(640, 480), 0, 0, cv::INTER_AREA); 
cv::namedWindow("Contours", CV_WINDOW_AUTOSIZE); 
cv::imshow("Contours", img_dst); 
Verwandte Themen