首页 > 解决方案 > 为什么 cv2.seamlessClone 抛出错误'(-215:断言失败)'?

问题描述

我有 3 张图像(背景、前景、前景蒙版)

并且所有图像都具有相同的大小

当我运行下面的代码时,它会抛出错误:

错误:OpenCV(3.4.2) C:\Miniconda3\conda-bld\opencv-suite_1534379934306\work\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 '简历::垫::垫'

代码 :

import cv2 
import numpy as np

mask=cv2.imread('mask.jpg',0)
bg=cv2.imread('bg.jpg')
fg=cv2.imread('fg.jpg')


_, contours,_= cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, 
cv2.CHAIN_APPROX_SIMPLE)

c = max(contours, key = cv2.contourArea)
x,y,w,h = cv2.boundingRect(c)


center = (int(x+w*0.5),int(y+h*0.5))


output = cv2.seamlessClone(fg, bg, mask, center, cv2.NORMAL_CLONE)
    
    

cv2.imshow('sss',output)
cv2.waitKey(0)
cv2.destroyAllWindows()

背景: 在此处输入图像描述

fg: 在此处输入图像描述

面具: 在此处输入图像描述

谁能帮我 ?

谢谢 :)

标签: opencvimage-processingopencv3.0opencv-python

解决方案


您收到此错误是因为掩码的某些像素超出了bgfg。要解决此问题,您可以为所有值为 0 的图像添加边框。

您更新的代码将如下所示。我没有从输出图像中删除边框。您可以根据需要删除它。

import cv2
import numpy as np

mask = cv2.imread('mask.png', 0)
bg = cv2.imread('bg.png')
fg = cv2.imread('fg.png')

top, bottom, left, right = 20, 20, 20, 20
border_bg = cv2.copyMakeBorder(bg, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[0, 0, 0])
border_fg = cv2.copyMakeBorder(fg, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[0, 0, 0])
border_mask = cv2.copyMakeBorder(mask, top, bottom, left, right, cv2.BORDER_CONSTANT, value=0)

contours, _ = cv2.findContours(border_mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

c = max(contours, key=cv2.contourArea)
x, y, w, h = cv2.boundingRect(c)

center = (int(x + w * 0.5), int(y + h * 0.5))

output = cv2.seamlessClone(border_bg, border_fg, border_mask, p=center, flags=cv2.NORMAL_CLONE)

cv2.imshow("border_mask", border_mask)
cv2.imshow("border_bg", border_bg)
cv2.imshow("border_fg", border_fg)
cv2.imshow('output', output)

cv2.waitKey(0)
cv2.destroyAllWindows()

边框_bg 边界_fg
在此处输入图像描述 在此处输入图像描述
边框掩码 输出
在此处输入图像描述 在此处输入图像描述

推荐阅读