OpenCV中的奇怪错误

时间:2017-08-14 17:31:54

标签: python opencv image-processing ubuntu-14.04

我正在使用 OpenCV python 中编写程序,该程序从我的网络摄像头记录的素材中检测边缘(Canny Edge Detector)。我也使用两个轨道条来控制阈值(为了理解这些值如何改变这个边缘检测器的输出)。

我写的代码如下:

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

2 个答案:

答案 0 :(得分:1)

尝试制作轨迹栏并在同一窗口中显示图像,并查看错误是否仍然存在。我敢打赌它不应该。更改:cv2.imshow(' cannyEdge',edge)

答案 1 :(得分:1)

您是否创建了另一个名为" frame"?的窗口如果没有,看起来你应该改变框架' to to' cannyEdge':

cv2.imshow('cannyEdge', frame)