Я хочу приставить нос джокера к носу мужчины, регулируя размер носа к носу человека.
мужчина
нос
Я хочу приспособить нос к носу мужчины, нижний нос слишком большой.Я использую cv2.resize, но это вызовет некоторые ошибки.
man_with_nose
Я пытался изменить способы изменения размера joker_nose.jpg, но это не помогает.
Код ниже:
def get_noses(image):
nose_cascade = cv2.CascadeClassifier("haarcascade_mcs_nose.xml")
nose_cascade.load("D:\SoftWare\opencv\sources\data\haarcascades\haarcascade_mcs_nose.xml")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
noses = nose_cascade.detectMultiScale(
image,
scaleFactor=1.3,
minNeighbors=2,
minSize=(10, 10),
flags=cv2.CASCADE_SCALE_IMAGE
)
return noses
def put_joker_nose_to_face(image):
nose_pic = cv2.imread(r"./joker_nose.jpg")
# below line is the error causing part. If I comment this line, it's ok for
# me put the nose to the man except the nose is too big
# ----------------------------------------------------------------
temp_img = cv2.resize(nose_pic, (0,0), fx=0.5, fy=0.5)
# ----------------------------------------------------------------
# Create an all white mask
mask = 255 * np.ones(nose_pic.shape, nose_pic.dtype)
for nose in get_noses(image):
x, y, w, h = nose
print(x, y, w, h)
nose_center = (int(x+w/2), int(y+h/2))
image = cv2.seamlessClone(temp_img, image, mask, nose_center, cv2.NORMAL_CLONE)
return image
src_img = cv2.imread(r"C:\Users\Administrator\Desktop\5.jpg", -1)
cv2.imwrite("man_with_joker_nose.jpg", put_joker_nose_to_face(src_img))
Ошибка ниже
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\put_hat_to_man.py", line 113, in <module>
cv2.imwrite("man_with_hat.jpg", put_joker_nose_to_face(src_img))
File "C:\Users\Administrator\Desktop\put_hat_to_man.py", line 84, in put_joker_nose_to_face
image = cv2.seamlessClone(temp_img, image, mask, nose_center, cv2.NORMAL_CLONE)
cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv\modules\core\src\matrix.cpp:465: error: (-215:Assertion failed) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function 'cv::Mat::Mat'
Я не говорящий по-английски, я стараюсь изо всех сил.Заранее спасибо.
Похоже, я не могу публиковать изображения, поэтому я установил изображения в ссылки.