gpt4 book ai didi

python - 尝试在Haarcascades中使用模糊时出错

转载 作者:行者123 更新时间:2023-12-02 16:33:50 29 4
gpt4 key购买 nike

我试图自己做一个项目,我以为我可以做这个工作,但是那个问题确实发生了……我不知道发生了什么。该项目的目的是使照片或视频模糊不清。

import matplotlib.pyplot as plt
import numpy as np
import cv2

people = cv2.imread('Computer-Vision-with-Python/DATA/people.jpg',0)
people2 = cv2.imread('Computer-Vision-with-Python/DATA/people2.jpg')

def display(img, cmap='gray'):
fig=plt.figure(figsize=(12,10))
ax = fig.add_subplot(111)
ax.imshow(img,cmap='gray')

eye_cascade = cv2.CascadeClassifier('Computer-Vision-with-Python/DATA/haarcascades/haarcascade_eye.xml')

def detect_eye(img):
face_img = img.copy()

face_rects = eye_cascade.detectMultiScale(face_img,scaleFactor=1.2,minNeighbors=6)

for (x,y,w,h) in face_rects:
cv2.rectangle(face_img,(x,y),(x+w,y+h),(255,255,255),10)

return face_img

def detect_and_blur_eye(img):

eye_img = img.copy()
roi = img.copy()

eye_rects = eye_cascade.detectMultiScale(eye_img,scaleFactor=1.2, minNeighbors=6)

for (x,y,w,h) in eye_rects:
print (x,y,w,h)
roi = roi[y:y+h,x:x+w]
blurred_roi = cv2.medianBlur(roi,7)

eye_img[y:y+h,x:x+w] = blurred_roi

return eye_img

results = detect_and_blur_eye(people)

之后,我得到这个错误:
TypeError                                 Traceback (most recent call last)
<ipython-input-259-f561e117d7f8> in <module>
----> 1 results = detect_and_blur_eye(people)

<ipython-input-258-2ab32e080f88> in detect_and_blur_eye(img)
12 blurred_roi = cv2.medianBlur(roi,7)
13
---> 14 eye_img[y:y+h,x:x+w] = blurred_roi
15
16 return eye_img

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

我不知道发生了什么!在这种情况下,请指导我。提前致谢。

编辑

我发现了一些可以使我解决问题的方法。我更改了功能,以便可以获取一些值。
def detect_and_blur_eye(img):

eye_img = img.copy()
roi = img.copy()

eye_rects = eye_cascade.detectMultiScale(eye_img,scaleFactor=1.2, minNeighbors=6)

for (x,y,w,h) in eye_rects:
print (type(eye_rects))
print (x,y,w,h)
roi = roi[y:y+h,x:x+w]
print(roi.shape)
#blurred_roi = cv2.medianBlur(roi,7)

#eye_img[y:y+h,x:x+w] = blurred_roi

return eye_img

results = detect_and_blur_eye(people)

它给了我这个:
<class 'numpy.ndarray'>
1182 414 45 45
(45, 45)
<class 'numpy.ndarray'>
595 427 56 56
(0, 0)
<class 'numpy.ndarray'>
512 430 57 57
(0, 0)
<class 'numpy.ndarray'>
270 470 60 60
(0, 0)
<class 'numpy.ndarray'>
349 475 56 56
(0, 0)
<class 'numpy.ndarray'>
981 375 62 62
(0, 0)
<class 'numpy.ndarray'>
842 389 50 50
(0, 0)
<class 'numpy.ndarray'>
762 391 50 50
(0, 0)
<class 'numpy.ndarray'>
1072 390 54 54
(0, 0)
<class 'numpy.ndarray'>
1238 399 48 48
(0, 0)

因此,由于某种原因,我的形状是(0,0)

最佳答案

是的,像@ jtlz2所说的问题是由于在图像中找不到眼睛,因此没有类型,当您尝试分配它时会出现错误。可以使用两种解决方法,要么使用更好的分类器来填充眼睛,然后将其用于视频,则需要实时处理,而不能使用CNN。替代方法可以是dlib面部关键点。除此之外,如果您只想继续进行haar-cascades,则可以执行以下操作:

try:
print (x,y,w,h)
roi = roi[y:y+h,x:x+w]
blurred_roi = cv2.medianBlur(roi,7)

eye_img[y:y+h,x:x+w] = blurred_roi
except:
pass

这样,如果有任何错误,那么您的眼睛就不会模糊,但是程序不会抛出错误。

关于python - 尝试在Haarcascades中使用模糊时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61608604/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com