在 <module> 灰色 = cv2.cvtColor(帧,cv2.COLOR_BGR2GRAY)?
in <module> gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)?
我正在尝试用 cv2
制造一辆汽车 detector/classifier 我有一个从 github 下载的 .xml
文件:
https://gist.github.com/199995/37e1e0af2bf8965e8058a9dfa3285bc6 每当我 运行 我的代码得到
Traceback (most recent call last):
File "C:\Users\user1\Downloads\Stuff\Python\cascades\Car_classification.py", line 13, in <module>
gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)
error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
我的代码是:
import cv2
import numpy as np
cap = cv2.VideoCapture('car.jpg')
font = cv2.FONT_HERSHEY_TRIPLEX
harcascade = cv2.CascadeClassifier("cars.xml")
while True:
ret,frames = cap.read()
gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)
cars = harcascade.detectMultiScale(gray, 1.1 , 2)
for (x,y,w,h) in cars:
cv2.rectangle(frames,(x,y),(x+w,y+h),(255,0,0),2)
cv2.putText(frames,str("Car"),(x,y+h),font,1,255)
cv2.imshow('img',frames)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
我的输入图像:
我的输出图像:
它是一辆车,但我不认为轮胎是一辆车!那我做错了什么?
不能说为什么你的分类在汽车上没有任何确定性,因为我不知道 https://gist.github.com/199995/37e1e0af2bf8965e8058a9dfa3285bc6 came from. Without knowing that, I can't say what kind of images it's expected to be able to detect. It's possible that it was trained to recognize cars from images more like this 在哪里,甚至缩小得更多。在这种情况下,您的示例图像与经过训练的检测图像完全不同。不了解更多是不可能的。
至于你收到的那条错误信息,我至少可以
解释一下。
cap = cv2.VideoCapture('car.jpg')
您正在以视频形式打开图像。在第一次通过循环时,它(令人惊讶地)能够读取图像数据,但是在下一次通过之后就没有更多的“帧”可以读取了,所以你的 frames
对象是 None
,有其中没有图像数据。这意味着当您尝试将其转换为灰度时,操作失败。
我正在尝试用 cv2
制造一辆汽车 detector/classifier 我有一个从 github 下载的 .xml
文件:
https://gist.github.com/199995/37e1e0af2bf8965e8058a9dfa3285bc6 每当我 运行 我的代码得到
Traceback (most recent call last):
File "C:\Users\user1\Downloads\Stuff\Python\cascades\Car_classification.py", line 13, in <module>
gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)
error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
我的代码是:
import cv2
import numpy as np
cap = cv2.VideoCapture('car.jpg')
font = cv2.FONT_HERSHEY_TRIPLEX
harcascade = cv2.CascadeClassifier("cars.xml")
while True:
ret,frames = cap.read()
gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)
cars = harcascade.detectMultiScale(gray, 1.1 , 2)
for (x,y,w,h) in cars:
cv2.rectangle(frames,(x,y),(x+w,y+h),(255,0,0),2)
cv2.putText(frames,str("Car"),(x,y+h),font,1,255)
cv2.imshow('img',frames)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
我的输入图像:
我的输出图像:
它是一辆车,但我不认为轮胎是一辆车!那我做错了什么?
不能说为什么你的分类在汽车上没有任何确定性,因为我不知道 https://gist.github.com/199995/37e1e0af2bf8965e8058a9dfa3285bc6 came from. Without knowing that, I can't say what kind of images it's expected to be able to detect. It's possible that it was trained to recognize cars from images more like this
至于你收到的那条错误信息,我至少可以 解释一下。
cap = cv2.VideoCapture('car.jpg')
您正在以视频形式打开图像。在第一次通过循环时,它(令人惊讶地)能够读取图像数据,但是在下一次通过之后就没有更多的“帧”可以读取了,所以你的 frames
对象是 None
,有其中没有图像数据。这意味着当您尝试将其转换为灰度时,操作失败。