Ich entwickle ein Tool für ein Projekt meiner Ingenieurschule. Dies ist das erste Mal, dass ich ein HMI erstelle und openCV
und verwende qtpy
.
Mein Ziel ist es, eine erste Behandlung auf das Bild anzuwenden (Unschärfe und so), um es einfacher zu machen, die Konturen einer Pflaume zu erkennen. Dann möchte ich die Konturen der mit der openCV
findContour
Methode gefundenen Pflaume anzeigen. Vorerst ist es mir gelungen, die Konturen durch die openCV
Methode anzuzeigen, drawContours
es öffnet sich jedoch ein neues Fenster, matplot
anstatt die Konturen über dem Bild anzuzeigen, das bereits in meinem MHI angezeigt wird.
Wie kann ich die Konturen nicht in einem neuen Matplot-Fenster anzeigen, sondern über meinem bereits angezeigten Bild in meinem HMI?
So sieht mein HMI aus.
Hier ist mein Code bezüglich der Konturenanzeige, die drawContours
Methode verwendet.
def allContours(img_originale, masque, toggleMode):
if toggleMode:
#trouve les contours sur l'image
image_copy = img_originale.copy()
contours, hier = cv2.findContours(image=masque, mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_NONE)
cv2.drawContours(image=image_copy, contours=contours, contourIdx=-1, color=(0, 255, 0), thickness=2, lineType=cv2.LINE_AA)
cv2.imshow('Contours', image_copy)
cv2.waitKey(0)
else:
pass
Und hier ist der Codeteil, der mein Bild in der HMI anzeigt:
# Redimensionnement et affichage Image
image = cv2.resize(image, (int(self.ratio*self.image_w),int(self.ratio*self.image_h)))
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
height, width, channels = image.shape
step = channels*width
qImg = QImage(image.data, width, height, step, QImage.Format_RGB888)
self.imageLabel.setPixmap(QPixmap.fromImage(qImg))
Ich möchte das folgende Ergebnis erhalten, aber es in der HMI statt in einem neuen Fenster haben. Kann mir jemand sagen wie ich vorgehen soll? Danke!
Lösung des Problems
Es wäre einfacher, wenn wir mehr von Ihrem Code sehen könnten, aber im Grunde können Sie einfach das Bild mit den gezeichneten Konturen zurückgeben:
def allContours(img_originale, masque, toggleMode):
if toggleMode:
#trouve les contours sur l'image
image_copy = img_originale.copy()
contours, hier = cv2.findContours(image=masque, mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_NONE)
cv2.drawContours(image=image_copy, contours=contours, contourIdx=-1, color=(0, 255, 0), thickness=2, lineType=cv2.LINE_AA)
return image_copy
else:
return None
Passen Sie auch Ihre "Blur and Stuff"-Vorverarbeitung ein wenig an. Es sollten noch bessere Ergebnisse möglich sein. Probieren Sie vielleicht die Kantenerkennung von Canny aus.
Keine Kommentare:
Kommentar veröffentlichen