我正在尝试编写一个脚本,该脚本可以剪裁您的脸并使所有深色像素完全变为黑色。我首先使用级联来识别人脸。然后,我从ha级联的坐标中创建一个roi(感兴趣的区域)。之后,我使用范围内的滤镜选择深色像素,并从中创建一个蒙版。最后,但并非最不重要的一点是,我将此滤镜应用于裁剪后的图像以粘贴到我的脸上。
问题是当我使用bitwise_and函数时,它将返回错误。我无法理解该错误,但是当我进行搜索时,发现有类似问题的人。对我来说,问题是答案通常是无法理解的,或者仅仅是重新格式化代码。因此,我想知道互联网上的你们是否能够以一种使将来的读者可以理解的方式回答问题(并且还可以帮助我更正代码XD)。
这是我的代码:
import numpy as np
import cv2
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while(True):
#get's the cameras video
_ , img = cap.read()
#Converts to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = face_cascade.detectMultiScale(gray,1.3,5,1)
if len(face) > 0:
for (x,y,w,h) in face:
roi = img[y:y+h, x:x+w]
white = (255)
grey = (75)
#Finds dark pixel
mask = cv2.inRange(gray,grey,white)
res = cv2.bitwise_and(roi,roi,mask=mask)
cv2.imshow('img',res)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
这是错误:
Traceback (most recent call last):
File "C:\Users\molta\Documents\Pythons\Hologram2.py", line 23, in <module>
res = cv2.bitwise_and(roi,roi,mask=mask)
cv2.error: OpenCV(4.1.0) C:\projects\opencv-
python\opencv\modules\core\src\arithm.cpp:245: error: (-215:Assertion failed) (mtype == CV_8U || mtype == CV_8S) &&
_mask.sameSize(*psrc1) in function 'cv::binary_op'
答案 0 :(得分:1)
由于掩码的大小大于您所关注的区域,因此您遇到了错误。您正在使用roi
,它是原始图像的裁剪版本(裁剪的脸部),而mask
的大小等于原始图像的灰度版本。它们的大小应相同。我认为应该是这样:
if len(face) > 0:
for (x,y,w,h) in face:
roi = img[y:y+h, x:x+w]
img_gray = gray[y:y+h, x:x+w]
white = (255)
grey = (75)
# Finds dark pixel
mask = cv2.inRange(img_gray,grey,white)
res = cv2.bitwise_and(roi,roi,mask=mask)