Python 使用OpenCV时出错,程序意外关闭

Python 使用OpenCV时出错,程序意外关闭,python,numpy,opencv,cv2,Python,Numpy,Opencv,Cv2,由于某种原因,代表发布不会让他发布问题(意思是他只能每90分钟发布一次) 我正在尝试运行一个形状检测器程序来打开我的网络摄像头并搜索形状。当我这样做时,网络摄像头会打开,但几秒钟后会关闭并打开mac错误窗口。如何修复此代码/更改计算机上的某些内容以修复此问题?谢谢你的帮助 下面是错误的样子: 导入cv2 将numpy作为np导入 def nothing(x): #任何手术 通过 cap=cv2.视频捕获(0) cv2.namedWindow(“轨迹栏”) cv2.createTrackbar(“

由于某种原因,代表发布不会让他发布问题(意思是他只能每90分钟发布一次)

我正在尝试运行一个形状检测器程序来打开我的网络摄像头并搜索形状。当我这样做时,网络摄像头会打开,但几秒钟后会关闭并打开mac错误窗口。如何修复此代码/更改计算机上的某些内容以修复此问题?谢谢你的帮助

下面是错误的样子:

导入cv2
将numpy作为np导入
def nothing(x):
#任何手术
通过
cap=cv2.视频捕获(0)
cv2.namedWindow(“轨迹栏”)
cv2.createTrackbar(“L-H”,“Trackbars”,0,180,无)
cv2.createTrackbar(“L-S”,“Trackbar”,66255,无)
cv2.createTrackbar(“L-V”,“Trackbars”,134255,无)
cv2.createTrackbar(“U-H”,“轨迹栏”,180,180,无)
cv2.createTrackbar(“U-S”,“trackbar”,255,255,无)
cv2.createTrackbar(“U-V”,“Trackbars”,243255,无)
font=cv2.font\U好时综合酒店
尽管如此:
_,frame=cap.read()
hsv=cv2.CVT颜色(帧,cv2.COLOR_BGR2HSV)
l_h=cv2.getTrackbarPos(“l-h”,“轨迹栏”)
l_s=cv2.getTrackbarPos(“l-s”、“轨迹栏”)
l_v=cv2.getTrackbarPos(“l-v”、“轨迹栏”)
u_h=cv2.getTrackbarPos(“u-h”,“轨迹栏”)
u_s=cv2.getTrackbarPos(“u-s”、“轨迹栏”)
u_v=cv2.getTrackbarPos(“u-v”、“轨迹栏”)
lower_red=np.数组([l_h,l_s,l_v])
upper_red=np.数组([u_h,u_s,u_v])
遮罩=cv2.inRange(hsv,下部红色,上部红色)
内核=np.one((5,5),np.uint8)
掩码=cv2.腐蚀(掩码,内核)
#轮廓检测
如果int(cv2.\uuuuu版本\uuuuu[0])>3:
#Opencv 4.x.x
轮廓,u=cv2.查找轮廓(遮罩、cv2.RETR_树、cv2.CHAIN_近似图、简单图)
其他:
#Opencv 3.x.x
_,轮廓,u=cv2.查找轮廓(遮罩,cv2.RETR_树,cv2.CHAIN_近似简单)
对于轮廓中的cnt:
面积=cv2。轮廓面积(cnt)
近似=cv2.近似聚合度(cnt,0.02*cv2.弧长(cnt,真),真)
x=大约拉威尔()[0]
y=大约拉威尔()[1]
如果面积>400:
cv2.绘图轮廓(框架,[近似],0,(0,0,0),5)
如果len(近似值)=3:
cv2.putText(框架,三角形,(x,y),字体,1,(0,0,0))
elif len(近似值)=4:
cv2.putText(框架,矩形,(x,y),字体,1,(0,0,0))
elif 10
我发现这是一个权限问题。我们可以通过转到终端并使用sudo运行程序。

错误消息是什么?它太长,无法放入,但这里有一个链接:在
cap.read()之后检查帧是否有效。
:如果帧为
None
,则不要让循环执行。它显示为true,相机确实打开,它只是在崩溃之前不打开窗口,而是从循环中开始注释代码行,直到找到解决问题的行。
import cv2
import numpy as np



def nothing(x):
    # any operation
    pass

cap = cv2.VideoCapture(0)

cv2.namedWindow("Trackbars")
cv2.createTrackbar("L-H", "Trackbars", 0, 180, nothing)
cv2.createTrackbar("L-S", "Trackbars", 66, 255, nothing)
cv2.createTrackbar("L-V", "Trackbars", 134, 255, nothing)
cv2.createTrackbar("U-H", "Trackbars", 180, 180, nothing)
cv2.createTrackbar("U-S", "Trackbars", 255, 255, nothing)
cv2.createTrackbar("U-V", "Trackbars", 243, 255, nothing)

font = cv2.FONT_HERSHEY_COMPLEX

while True:
    _, frame = cap.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    l_h = cv2.getTrackbarPos("L-H", "Trackbars")
    l_s = cv2.getTrackbarPos("L-S", "Trackbars")
    l_v = cv2.getTrackbarPos("L-V", "Trackbars")
    u_h = cv2.getTrackbarPos("U-H", "Trackbars")
    u_s = cv2.getTrackbarPos("U-S", "Trackbars")
    u_v = cv2.getTrackbarPos("U-V", "Trackbars")

    lower_red = np.array([l_h, l_s, l_v])
    upper_red = np.array([u_h, u_s, u_v])

    mask = cv2.inRange(hsv, lower_red, upper_red)
    kernel = np.ones((5, 5), np.uint8)
    mask = cv2.erode(mask, kernel)

    # Contours detection
    if int(cv2.__version__[0]) > 3:
        # Opencv 4.x.x
        contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    else:
        # Opencv 3.x.x
        _, contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    for cnt in contours:
        area = cv2.contourArea(cnt)
        approx = cv2.approxPolyDP(cnt, 0.02*cv2.arcLength(cnt, True), True)
        x = approx.ravel()[0]
        y = approx.ravel()[1]

        if area > 400:
            cv2.drawContours(frame, [approx], 0, (0, 0, 0), 5)

            if len(approx) == 3:
                cv2.putText(frame, "Triangle", (x, y), font, 1, (0, 0, 0))
            elif len(approx) == 4:
                cv2.putText(frame, "Rectangle", (x, y), font, 1, (0, 0, 0))
            elif 10 < len(approx) < 20:
                cv2.putText(frame, "Circle", (x, y), font, 1, (0, 0, 0))


    cv2.imshow("Frame", frame)
    cv2.imshow("Mask", mask)

    key = cv2.waitKey(1)
    if key == 27:
        break

cap.release()
cv2.destroyAllWindows()