我想从网络摄像头中获取一些面部图像样本。我想取大约8个样本。因此,当我按下按钮“s”时,它将进行8个采样。所以我尝试使像这样的循环:
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
flags=cv2.cv.CV_HAAR_SCALE_IMAGE
)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
if cv2.waitKey(1) & 0xFF == ord('s'):
ROI = frame[y:y+h,x:x+w]
nameUser = raw_input("Input yourname: ")
for i in range(0,8):
i_string = str(i)
cv2.imwrite(nameUser+i_string+'.jpg',ROI)
time.sleep(3)
但是我得到的8张图像完全相同。有一种方法可以使程序带有样本面孔,但不完全相同吗?
最佳答案
我认为,这只是一个逻辑问题,请尝试重新组织它:
recording = 0 # use it as a flag/counter
while(True):
ok, frame= cap.read();
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY);
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
flags=cv2.cv.CV_HAAR_SCALE_IMAGE
)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
if cv2.waitKey(1) & 0xFF == ord('s'):
recording = 8
nameUser = raw_input("Input yourname: ")
if recording >= 0 && len(faces)>0:
ROI = frame[y:y+h,x:x+w]
i_string = str(recording)
cv2.imwrite(nameUser+i_string+'.jpg',ROI)
recording -= 1
time.sleep(3)
关于python - OpenCV + Python自动取样,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27600321/