我尝试在opencv python上运行我的自行车检测。当我运行它时它可以正常工作,但是当程序结束时会出现错误。我不知道该如何解决。有人可以告诉我问题出在哪里吗?
import cv2
import numpy as np
import pygame
import datetime as dt
from pygame import mixer
import time
#=============== Variable Mouse ==================#
drawing = False
point1 = ()
point2 = ()
drawingTwo = False
pointTwo_1 = ()
pointTwo_2 = ()
Mouse_count = False
#================================================#
def mouse_drawing(event, x, y, flags, params):
global point1, point2, drawing
global pointTwo_1, pointTwo_2, drawingTwo, Mouse_count
#----------Mouse 1-------
if Mouse_count == False:
if event == cv2.EVENT_LBUTTONDOWN:
if drawing is False:
drawing = True
point1 = (x, y)
#else:
#drawing = False
elif event == cv2.EVENT_MOUSEMOVE:
if drawing is True:
point2 = (x, y)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
Mouse_count = True
#================================================#
lastTime = dt.datetime.now()
currentTime = dt.datetime.now()
#Make Sound
pygame.mixer.init()
#create VideoCapture object and read from video file
cap = cv2.VideoCapture('test13.mp4')
cv2.namedWindow("Detecion motor")
cv2.setMouseCallback("Detecion motor", mouse_drawing)
while True:
ret, frame = cap.read()
car_cascade = cv2.CascadeClassifier('cascade11.xml')
#============================== ROI One ============================#
if point1 and point2:
#Rectangle marker
r = cv2.rectangle(frame, point1, point2, (100, 50, 200), 5)
frame_ROI = frame[point1[1]:point2[1],point1[0]:point2[0]]
#------------------Detect car ROI-------------------#
if drawing is False:
#convert video into gray scale of each frames
ROI_grayscale = cv2.cvtColor(frame_ROI, cv2.COLOR_BGR2GRAY)
#detect cars in the video
cars_ROI = car_cascade.detectMultiScale(ROI_grayscale, 1.1, 3)
if len(cars_ROI) > 0:
if (currentTime - lastTime).seconds > 20:
lastTime = dt.datetime.now()
sound = mixer.Sound('sirine2.wav')
sound.play()
for (x, y, w, h) in cars_ROI:
cv2.rectangle(frame_ROI, (x, y), (x + w, y + h), (0, 255, 0), 2)
currentTime = dt.datetime.now()
# cv2.putText(frame_ROI, "Jumlah Motor : " + str(cars_ROI.shape[0]), (10,frame_ROI.shape[0] -25), cv2.FONT_HERSHEY_TRIPLEX, 0.5,(0,255,0), 1)
# -------------------------------------------------#
#============================== ROI Two ============================#
#==================================================================#
cv2.imshow("Detecion motor", frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
然后错误是:
Traceback (most recent call last):
File "D:/Skripsi/CarDetection-master/DeteksiMotor.py", line 65, in <module>
frame_ROI = frame[point1[1]:point2[1],point1[0]:point2[0]]
TypeError: 'NoneType' object is not subscriptable
答案 0 :(得分:0)
通过引用@ mkrieger1的注释,我们可以在您的代码中看到您正在检查point1
和point2
是否都将转换为布尔值True,因此问题不存在。默认情况下,这意味着frame
等于无。替换行:
if point1 and point2:
具有:
if frame and point1 and point2:
我的意思是,frame
是看起来像输入操作的结果,它们可能以许多创造性的方式失败。