2017-08-14 2 views
1

Ich schreibe ein Programm in Python mit OpenCV, die die Kanten erkennt (Canny Edge Detector) aus dem Material meiner Webcam Aufzeichnungen. Ich verwende auch zwei Trackbars, um die Schwellenwerte zu steuern (um zu verstehen, wie diese Werte die Ausgabe dieses Flankendetektors verändern).Weird Error in OpenCV

Der Code, den ich geschrieben habe, ist folgende:

import cv2 
import numpy as np 


def nothing(x): 
    pass 

img = np.zeros((300,512,3), np.uint8) 
cv2.namedWindow('cannyEdge') 
cv2.createTrackbar("minVal", "cannyEdge", 0,100, nothing) 
cv2.createTrackbar("maxVal", "cannyEdge", 100,200,nothing) 

cap = cv2.VideoCapture(0) 
while(True): 

    minVal = cv2.getTrackbarPos("minVal", "cannyEdge") 
    maxVal = cv2.getTrackbarPos("maxVal", "cannyEdge") 

    #capture frame by frame 
    ret, frame = cap.read() 
    cv2.imshow('frame', frame) 
    edge = cv2.Canny(frame,minVal,maxVal) 

    #display the resulting frame 
    cv2.imshow('frame', edge) 

    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

#When everything is done, release the capture 
cap.release 
cv2.destroyAllWindows() 

Dieses Programm ist nur für Bildungszwecke, wie ich zur Zeit des Lernen OpenCV zu verwenden.

Jedes Mal, wenn ich das Programm laufen über den Code einfach gut zu sein scheint zu funktionieren, aber ich bekomme die folgende Fehler:

Glib-GObject KRITISCHE **: g_object_unref: Behauptung 'G_IS_OBJECT (Objekt)' failed

Ich habe nach dem Grund gesucht, dass dieser Fehler auftritt, aber ich habe nichts hilfreich gefunden. Mein Instinkt sagt mir, dass meine Implementierung für die Trackbars falsch ist und daher diesen Fehler verursacht.

Die Tutorials, die ich verwendet, sind die folgenden:

Weiß jemand, warum tritt dieser Fehler auf? Jede Hilfe wird geschätzt!

Ich bin mit Ubuntu 14.04, OpenCV 3.2.0 und Python 2.7.6

Antwort

0

Versuchen Sie, die Spurstangen machen und das Bild im gleichen Fenster angezeigt wird und sehen, ob der Fehler weiterhin besteht. Ich wette, es sollte nicht. Änderung: cv2.imshow ('cannyEdge', Kante)

+0

Ich tat, was Sie vorgeschlagen (die trackbars machen und das img im gleichen Fenster angezeigt wird), und es löste das Problem. Du hast meinen Dank !! – NikSotir

0

Haben Sie ein anderes Fenster namens "frame" erstellt? Wenn nicht, sieht es aus wie Sie sollten ‚Rahmen‘ ändern zu ‚cannyEdge‘:

cv2.imshow('cannyEdge', frame) 
+0

Danke für die Antwort. Obwohl Sie absolut recht haben, muss ich I.Newton die richtige Antwort geben, weil er dasselbe (mit anderen Worten) ein wenig früher vorgeschlagen hat als Sie. Einen schönen Tag noch!! – NikSotir