OpenCV图像裁剪错误

时间:2015-09-18 09:33:57

标签: python opencv

我执行了一个程序,它从目录中读取所有value=127.0.01个文件,执行面部检测,裁剪面部并保存它们。

问题在于,当运行官方python程序时,我能够检测到所有面部,但它只能从每个图像中保存少量面部。

我做错了什么?

.jpg

2 个答案:

答案 0 :(得分:0)

正如Gall在评论中所说,问题来自你的缩进。每个面都不会执行最后三行,因为它们的缩进不会使它们成为面上循环的一部分。你想要这样的东西:

modules/DefaultModule/static/

请注意,使用此代码时,可能会发生文件名冲突(图像中# Draw a rectangle around the faces for (x, y, w, h) in faces: image = image[y-top:y+h+bottom, x-left:x+w+right] cv2.imwrite("cropped_{1}_{0}".format(str(file),str(x)), image) 的2个面相同)。您可能希望使用唯一的字符串来避免该问题。一个简单的计数器可以解决问题。

答案 1 :(得分:-1)

问题你的代码是当第一个人剪切图像时,以下已经尝试不剪切原始图像,并且已经从某个第一个人那里,所以你看起来认为每个人都会理解的代码

import numpy as np
import cv2
import sys
import glob 

cascPath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascPath)

img = cv2.imread('3.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30),
        #flags = cv2.cv.CV_HAAR_SCALE_IMAGE
        flags=0
    )

print "Found {0} faces!".format(len(faces))

left = 10
right = 10
top = 10
bottom = 10
i=0
count=0

for (x, y, w, h) in faces:
        print x, y, w, h, i
        i=i+1
        img  = img[y-top:y+h+bottom, x-left:x+w+right]
        cv2.imwrite('foo{}.png'.format(count), img)
        count += 1
        img=cv2.imread('3.jpg')