【问题标题】:why cv2.seamlessClone throw error ' (-215:Assertion failed) '?为什么 cv2.seamlessClone 抛出错误'(-215:断言失败)'?
【发布时间】:2021-03-14 11:39:15
【问题描述】:

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

所有图片大小相同

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

错误:OpenCV(3.4.2) C:\Miniconda3\conda-bld\opencv-suite_1534379934306\work\modules\core\src\matrix.cpp:465: error: (-215:Assertion failed) 0

代码:

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:

掩码:

谁能帮帮我?

谢谢:)

【问题讨论】:

    标签: opencv image-processing opencv3.0 opencv-python


    【解决方案1】:

    您收到此错误是因为掩码的某些像素超出了bg 和fg。要解决此问题,您可以为所有值为 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()
    
    
    border_bg border_fg
    border_mask output

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 2021-02-13
      • 2022-10-15
      • 1970-01-01
      • 2020-02-03
      • 2019-12-04
      • 2021-09-10
      相关资源
      最近更新 更多