2017-08-14 145 views
1

我正在编写一个程序python使用OpenCV它从我的网络摄像机记录中的镜头检测边缘(Canny Edge Detector)。我还使用两个轨迹条来控制阈值(以便了解这些值如何改变此边缘检测器的输出)。OpenCV奇怪的错误

我写的代码如下:

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() 

这个节目是为教育目的,因为我正在学习使用OpenCV的。

我每次运行程序上面的代码似乎是工作得很好,但我得到以下错误:

的GLib,GObject的-CRITICAL **:g_object_unref:断言“G_IS_OBJECT(对象)”失败

我寻找了这个错误发生的原因,但我没有找到有用的东西。我的直觉告诉我,我的轨道栏的实施是错误的,因此它导致了这个错误。

我使用的教程如下:

有谁知道为什么这个错误发生?任何帮助将不胜感激!

我运行Ubuntu 14.04,OpenCV的3.2.0和Python 2.7.6

回答

0

尝试使轨道条和显示在同一个窗口中的图像,看看问题是否解决。我敢打赌它不应该。更改:cv2.imshow('cannyEdge',边缘)

+0

我做你什么建议(使trackbars并显示在同一个窗口中的图片),它解决了这个问题。你有我的感谢! – NikSotir

0

您是否创建了另一个名为“frame”的窗口?如果不是,它看起来像你应该改变“框架”到“cannyEdge”:

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

感谢您的回复。虽然你是绝对正确的,但我必须给予牛顿先生正确的答案,因为他比你早一点提出相同的事情(用不同的词)。祝你今天愉快!! – NikSotir