我正在尝试使用Python中的OpenCv使用haarcascade全身算法来检测图像中的人。
当我考虑在单个图像上使用它时,我没有遇到任何问题。
import numpy as np
import cv2 as cv
body_cascade = cv.CascadeClassifier(r'...\haarcascade_fullbody.xml')
image = cv.imread(r'...\image.jpg')
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
body = body_cascade.detectMultiScale(gray, 1.01, 4)
for (x,y,w,h) in body:
cv.rectangle(image,(x,y),(x+w,y+h),(255,0,0),3)
但是,当我尝试使用相同的程序并一次遍历多个图像时,出现了一个神秘的OpenCv错误。我的文件夹中有一些图像,我想将其中包含人物的图像与没有图像的图像分开。我写了以下内容:
import os
for file in os.walk(r'...\Folder'):
file=str(file)
im=cv.imread(file)
gray = cv.cvtColor(im, cv.COLOR_BGR2GRAY)
body = body_cascade.detectMultiScale(gray, 1.01, 4)
for (x,y,w,h) in body:
cv.rectangle(im,(x,y),(x+w,y+h),(255,0,0),3)
if(body.size >= 0):
print('okay')
else:
print('Not okay')
但是出现以下错误:
error: OpenCV(3.4.2) c:\projects\opencv-python\opencv\modules\imgproc\src\color.hpp:253: error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'cv::CvtHelper<struct cv::Set<3,4,-1>,struct cv::Set<1,-1,-1>,struct cv::Set<0,2,5>,2>::CvtHelper'
第gray = cv.cvtColor(im, cv.COLOR_BGR2GRAY)
行
我无法理解错误的原因以及为什么在拍摄单个图像时可以使用的相同代码有效,但是在文件夹中进行迭代时却无法理解。我需要调整图像大小吗?
此外,我尝试在文件夹中仅保留一个图像,该代码以前在该文件夹中有效,但仍然无法正常工作。
答案 0 :(得分:0)
Doc,看来OpenCV无法找到映像。如果您使用完整路径而不是相对路径,会发生什么? (以及“ ...”中的三个点是什么?) 请将您读取的文件转回光盘以进行调试,我想您会感到惊讶。