当前位置: 首页 > 面试题库 >

OpenCV Python中的渐变蒙版混合

酆勇
2023-03-14
问题内容

我有一个图像和圆圈区域。除了圆圈区域,我需要模糊所有内容。我还需要使圆的边界平滑。

现在我在python中有代码,这不会模糊圆的边界。

def blur_image(cv_image, radius, center, gaussian_core, sigma_x):
    blurred = cv.GaussianBlur(cv_image, gaussian_core, sigma_x)
    h, w, d = cv_image.shape
# masks
    circle_mask = np.ones((h, w), cv_image.dtype)
    cv.circle(circle_mask, center, radius, (0, 0, 0), -1)
    circle_not_mask = np.zeros((h, w), cv_image.dtype)
    cv.circle(circle_not_mask, center, radius, (2, 2, 2), -1)
# Computing
    blur_around = cv.bitwise_and(blurred, blurred, mask=circle_mask)
    image_in_circle = cv.bitwise_and(cv_image, cv_image, mask=circle_not_mask)
    res = cv.bitwise_or(blur_around, image_in_circle)
    return res

当前版本:
如何模糊圆的边界?在输出示例中,我在程序中使用了渐变蒙版。在opencv中有类似的东西吗?
更新04.03
所以,我已经从这个回答的主题以及我所拥有的内容中尝试了公式: 代码:

def blend_with_mask_matrix(src1, src2, mask):
    res = src2 * (1 - cv.divide(mask, 255.0)) + src1 * cv.divide(mask, 255.0)
return res

此代码应与最近的代码相似,但事实并非如此。圆圈中的图像略有不同。颜色有问题。 问题仍然悬而未决。


问题答案:

因此,主要的问题(mask/255) * blur + (1-mask/255)*anotherimg是运算符。他们只在一个频道上工作。下一个问题是使用浮点数来“平滑”。
我将与Alpha通道混合的代码更改为:
1)我将每个通道用于源图像和蒙版
2)执行公式
3)合并通道

def blend_with_mask_matrix(src1, src2, mask):
    res_channels = []
    for c in range(0, src1.shape[2]):
        a = src1[:, :, c]
        b = src2[:, :, c]
        m = mask[:, :, c]
        res = cv.add(
            cv.multiply(b, cv.divide(np.full_like(m, 255) - m, 255.0, dtype=cv.CV_32F), dtype=cv.CV_32F),
            cv.multiply(a, cv.divide(m, 255.0, dtype=cv.CV_32F), dtype=cv.CV_32F),
           dtype=cv.CV_8U)
        res_channels += [res]
    res = cv.merge(res_channels)
    return res

作为渐变蒙版,我只是使用模糊的圆圈。

def blur_image(cv_image, radius, center, gaussian_core, sigma_x):
    blurred = cv.GaussianBlur(cv_image, gaussian_core, sigma_x)

    circle_not_mask = np.zeros_like(cv_image)
    cv.circle(circle_not_mask, center, radius, (255, 255, 255), -1)
#Smoothing borders
    cv.GaussianBlur(circle_not_mask, (101, 101), 111, dst=circle_not_mask)
# Computing
    res = blend_with_mask_matrix(cv_image, blurred, circle_not_mask)
    return res

结果:

它的工作比没有平滑边界的第一个版本慢一些,但是可以。
结束语。



 类似资料:
  • 某些打印机可能难于平滑地打印(没有不连续色带)或者根本不能打印具有渐变、网格或颜色混合的文件。请按下列一般性指导原则改善打印效果: 使用两种或两种以上印刷色分量之间至少 50% 变色率的混合。 使用较短的混合。最佳长度取决于混合中的颜色,但最好保持混合短于 7.5 英寸。 使用较浅的颜色,或缩短深色混合。很深的颜色和白色之间最可能出现色带。 使用可保持 256 个灰度等级的适当的灰度等级。 如果在

  • 渐变 渐变是在两种邻近的颜色(包括黑色和白色)之间实现平滑过渡的若干方法之一。 A:由黑色到白色的线性渐变; B:多种颜色的线性渐变; C:由彩色到透明的线性渐变(将鼠标置于图形上方可显示透明度); D:由彩色到白色的径向渐变

  • 某些打印机可能难于平滑地打印(没有不连续色带)或者根本不能打印具有渐变、网格或颜色混合的文件。 打印渐变、网格和颜色混合 某些打印机可能难于平滑地打印(没有不连续色带)或者根本不能打印具有渐变、网格或颜色混合的文件。请按下列一般性指导原则改善打印效果: 使用两种或两种以上印刷色分量之间至少 50% 变色率的混合。 使用较短的混合。最佳长度取决于混合中的颜色,但最好保持混合短于 7.5 英寸。 使用

  • 在popover、侧滑菜单等界面,经常会用到蒙版遮罩;比如popover弹出后,除popover控件外的其它区域都会遮罩一层蒙版,用户点击蒙版不会触发蒙版下方的逻辑,而会关闭popover同时关闭蒙版;再比如侧滑菜单界面,菜单划出后,除侧滑菜单之外的其它区域都会遮罩一层蒙版,用户点击蒙版会关闭侧滑菜单同时关闭蒙版。 遮罩蒙版常用的操作包括:创建、显示、关闭,如下代码: var mask = mui

  • 蒙版/裁剪节点 可实现蒙版和裁剪特性的节点 成员变量 变量 类型 名称 备注 inverted boolean 执行阈值向 默认为false。true时,取alpha 0-alphaThreshold值,false时取alphaThreshold-1值 alphaThreshold number 裁剪透明度的阈值 无 方法 构造函数 new BK.ClipNode(stencilSp) 参数 类型

  • 关于剪切蒙版 剪切蒙版是一个可以用其形状遮盖其他图稿的对象,因此使用剪切蒙版,您只能看到蒙版形状内的区域,从效果上来说,就是将图稿裁剪为蒙版的形状。剪切蒙版和遮盖的对象称为剪切组合。可以通过选择的两个或多个对象或者一个组或图层中的所有对象来建立剪切组合。 对象级剪切组合在 “图层 ”面板中组合成一组。如果创建图层级剪切组合,则图层顶部的对象会剪切下面的所有对象。对对象级剪切组合执行的所有操作(如变

  • Another hard-to-write CSS3 feature is a gradient. You have to repeat long gradient definition multiple times with different vendor prefixes. Also, if you want to cover all gradient-supported browsers,

  • 使用渐变填充可以在要应用其他任何颜色时应用渐变颜色混和。创建渐变填色是在一个或多个对象间创建颜色平滑过渡的好方法。您可以将渐变存储为色板,从而便于将渐变应用于多个对象。 注:如果要创建颜色可以沿不同方向顺畅分布的单个多色对象,请使用网格对象。 要查看使用渐变来改进绘画的视频,请参阅 www.adobe.com/go/lrvid4017_ai_cn。有关创建渐变的教程,请参阅 “Unleash th