opencv로 유리를 겹쳐서 복제하려고합니다. 그러나 비디오가 나타나면 안경은 알파 레이어에 검은 색으로 표시됩니다. 여기 내 코드는 다음과 같습니다.python에서 검정색 png로 opencv를 사용하는 알파 블렌딩
video_capture = cv2.VideoCapture(0)
anterior = 0
glasses = cv2.imread('Glasses_1.png')
def put_glasses(glasses,fc,x,y,w,h):
face_width = w
face_height = h
glasses_width = int(face_width)
glasses_height = int(face_height*0.32857)
glasses = cv2.resize(glasses,(glasses_width,glasses_height))
for i in range(glasses_height):
for j in range(glasses_width):
for k in range(3):
if glasses[i][j][k]<235:
fc[y+i-int(-0.25*face_height)-1][x+j][k] = glasses[i][j][k]
return fc
while True:
if not video_capture.isOpened():
print('Unable to load camera.')
sleep(5)
pass
ret, frame = video_capture.read()
if ret is True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
else:
continue
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(40,40)
)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.putText(frame,"Person Detected",(x,y),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255),2)
frame = put_glasses(glasses, frame, x, y, w, h)
누구든지 도움을 주시면 매우 감사하겠습니다.
여기에 단지 총평 --- 첫째,하지만 당신이 정말로 그런 NumPy와 배열을 통해 루프 필요가 없습니다 . 반복하지 않고 한 번에 여러 값을 지정할 수 있으며 훨씬 더 빠릅니다. WRITE 질문 : 알파 레이어로 어디에서 무엇을하고 있습니까? –
나는 알파 레이어를 버릴 것이다, 나는 단지 "안경"과 그 사이에 아무것도 넣지 않을 것이다. –