2016-05-01 10 views
1

Ich verwende WarpPerspective(), um das Video zu stabilisieren. Nachdem ich diese Funktion aufgerufen habe, bleibt mir ein leicht gedrehtes Bild übrig, das einen leeren Platz im Bildrechteck frei lässt. z.B.OpenCV: Wie kann man nach dem Aufruf von warpPerspective in opencv einen Ausschnitt berechnen (oder trimmen), um ohne Leerraum zu passen?

enter image description here

Ich mag würde berechnen, wie viel ich trimmen müssen/Ernte des Bild, wo es innerhalb des Bildes des Rechtecks ​​paßt ohne leeren Raum .. Ich kann nicht herausfinden, wie diese zu berechnen. Ich stelle mir vor, dass dies ein häufiges Problem sein muss, aber ich konnte keine Ergebnisse beim Stapelüberlauf finden (außer der Berechnung der Kontur für genähte Bilder, was meiner Meinung nach ein sehr anderes Problem ist).

Beispielcode:

import urllib 
import numpy as np 
import cv2 
import matplotlib.pyplot as plt 

link = "http://i68.tinypic.com/f4mhy0.jpg" 
req = urllib.urlopen(link) 
arr = np.asarray(bytearray(req.read()), dtype=np.uint8) 
img = cv2.imdecode(arr,-1) 
img=cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) 
(h, w) = img.shape[:2] 
M=np.array([[1.00430091e+00,7.30151802e-03,-1.55476794e+01][-5.88214567e-03,1.00545504e+00,-3.72084380e+00], [4.47652947e-07,3.99215743e-06,1.00000000e+00]]) 
warped = cv2.warpPerspective(img, M, (w,h)) 
plt.imshow(warped),plt.show() 
+0

Mögliches Duplikat von [So zeigen Sie das gesamte Bild bei Verwendung von OpenCV warpPerspective] (http://stackoverflow.com/questions/13063201/how-to-show-the-whole-image-when-using-opencv-warperpective) – beaker

Antwort

0

Sie sollten mit der gleichen Matrix auf den 4 Ecken des Originalbilds angewendet verwenden verwandeln. So werden Sie wissen, wohin die Ecken gehen.

0

In motion_stabilizing.cpp gibt es eine Funktion namens estimateOptimalTrimRatio. Dies löst das Problem!