我有一个脚本,它使用OpenCV查找面,如果找不到面,它会输出“找不到面”,但它不会做其他任何事情。它应该向后看,并要求另一个图像。有人能告诉我为什么只打印“找不到人脸”直到我按CTRL+C吗?你知道吗
def Crop(
imagePattern,
boxScale,
outputimg,
padding,
):
happy = True
imgList = glob.glob(imagePattern)
while happy:
if len(imgList) <= 0:
return
else:
for img in imgList:
pil_im = Image.open(img)
cv_im = pil2cvGrey(pil_im)
faces = DetectFace(cv_im, faceCascade)
if faces:
n = 1
for face in faces:
croppedImage = imgCrop(pil_im, face[0],
padding, boxScale=boxScale)
(fname, ext) = os.path.splitext(img)
fname = os.path.basename(fname)
croppedImage.save(outputimg + '\\' + fname
+ ' -c' + ext)
n += 1
print 'Cropping:', fname
else:
print 'No faces found:', img
break
# Verify image
# savedPath = outputimg + '\\' + fname + ' -c' + ext
# verify = cv2.imread(savedPath, 0)
# cv2.imshow('Saved Image', verify)
print 'Please open the file manually to view for now'
print 'Are you happy with the final crop?'
happyTest = raw_input('Enter y or n: ')
happyTest = happyTest.strip()
if happyTest == 'y':
happy = False
elif happyTest == 'n':
padding = int(raw_input('Enter crop padding:'))
else:
print 'Not a valid input'
print 'Do you have more pictures to take?'
again = raw_input('Enter y or n: ')
if again == 'y':
Webcam(webcam, padding, boxScale)
else:
print 'Closing application'
time.sleep(3)
raise SystemExit
很抱歉造成混淆,我的代码使用了制表符,因此复制/粘贴不正确。你知道吗
编辑: 谢谢你让我知道混合标签和空间,但我的问题仍然是一样的。我是用休息还是继续也没关系。我需要使用递归并再次调用函数吗?你知道吗
您编码的
break
从for img in imgList:
循环中断,不是while happy:
循环。由于用于询问用户裁剪是否令人满意的代码位于该循环内(并且在break
之后),因此它永远无法到达(因此happy
永远无法设置False
)。你知道吗我不知道这是否是问题所在,但这是您发布它的方式:在else语句之后的命令没有缩进。它不应该给你一个错误吗?你知道吗
您使用的是
break
语句,它完全停止for
循环。你知道吗相反,可以在那里使用
continue
语句跳过当前图像,然后转到for
循环中的下一个图像。你知道吗阅读更多关于
break
和continue
here另外,您将制表符和空格一起使用,这会导致块的缩进未对齐。虽然它们看起来好像对齐得很好,但调试选项卡错误会让人噩梦,所以只需更改编辑器设置,将选项卡用作4个空格。你知道吗
编辑
代码中存在多个问题:
len(imgList)<=0
,正如在其他答案中已经指出的那样,它是多余的。你知道吗happytest
值,但是只有在上次运行时输入的值才会影响happy
变量的值。你知道吗False
的跑步中停下来,而现在绝对不会发生这种情况。你知道吗相关问题 更多 >
编程相关推荐