Erstellen trackbars zu scrollen großes Bild in OpenCV Python
Ich bin versuchen, um Bildlaufleisten in einem Fenster erstellt, indem OpenCv python. Ich weiß, dass ich Sie implementieren müssen, um den code zu behandeln und das scrolling/panning-Vorgang, aber ich habe keine Ahnung, wo zu beginnen und ich habe überall gesucht. Es ist wichtig, dass ich einen Scrollbalken in der OpenCV-Fenster statt mit einem anderen GUI-Fenster-Rahmen. Unten ist der code, den ich benutze, um ein Bild laden und skalieren Sie das Bild(was funktioniert). Jede Hilfe ist willkommen. Und bitte nicht verweisen mich auf die opencv-Dokumentation zum erstellen von trackbars, ich habe es gelesen und es überhaupt nicht helfen. Danke!
import cv2
import cv2.cv as cv
import numpy as np
cv.NamedWindow('image', cv.CV_WINDOW_AUTOSIZE)
cv.NamedWindow('Control Window', cv.CV_WINDOW_AUTOSIZE)
print " Zoom In-Out demo "
print " Press u to zoom "
print " Press d to zoom "
img = cv2.imread('picture.jpg')
while(1):
h,w = img.shape[:2]
cv2.imshow('image',img)
k = cv2.waitKey(10)
if k==27 :
break
elif k == ord('u'): # Zoom in, make image double size
img = cv2.pyrUp(img,dstsize = (2*w,2*h))
elif k == ord('d'): # Zoom down, make image half the size
img = cv2.pyrDown(img,dstsize = (w/2,h/2))
cv2.destroyAllWindows()
- Können Sie bitte erklären, warum Sie nicht setzen Sie das Bild in einem gui-Fenster?
- Weil ich mache Bildbearbeitung auf dem Bild wie immer pixel und ich verlieren diese Fähigkeit, wenn ich die Kapseln in ein widget oder ein Fenster vorgesehen, durch das GUI-framework
InformationsquelleAutor jpxrc | 2015-02-18
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche Bedürfnis, so heute habe ich eine Klasse angelegt von Grund auf behandelt, Maus Klicks, pan und zoom auf ein OpenCV-Fenster. Es funktioniert wie folgt:
(Soweit ich das beurteilen kann, OpenCV nicht Lesen können, das Mausrad und kann nicht erstellen Sie eine vertikale trackbar, so dass der Benutzer Erfahrung ist ein wenig nicht-intuitive, aber es funktioniert.)
while key != ord('q') and key != 27 and cv2.getWindowProperty(window.WINDOW_NAME, 0) >= 0:
dieses Problem behoben ist.self.imShape = np.array(imShape)
mitself.imShape = np.array(imShape[0:2])
.Dass das nicht stimmt. Sie können immer aktualisieren Sie das Bild nach dem verarbeiten. Zum Beispiel schauen hier und hier ist besonders die.
Diese Beispiele verarbeitet die Bilder in OpenCv und steckte Sie in eine PyQt-gui-frame. Ich bin sicher, dass Sie tun können ähnliche Dinge mit anderen Gui-frameworks (ich konnte nicht finden, alles, was für Tkinter). Ich glaube, ich habe gesehen wxPython integriert in die Vergangenheit.
Wenn Sie Ihr Programm, werden Sie sicher, dass die Anzeige eine Kopie des Bildes. so, das image-Objekt wird weiterhin wechselhaft, und Sie können Sie einfach aktualisieren Sie das Bild in die Gui. Zum Beispiel, hier ist etwas pseudo-code:
Natürlich, das ist nicht, was Sie eigentlich schreiben, es ist eine Abstraktion der Idee.
EDIT: In diesem Fall würde ich render das video (siehe dieses Beispiel & hier), dann nehmen Sie das Bild als separates Objekt, dann machen Sie (wieder wie ein drittes Objekt) mit pyqt. Zu fangen Sie die Position der Maus klicken Sie, Blick auf diese Frage, und schließlich die Referenz, die auf das zweite Objekt, welches die OpenCV-Bild.