首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只在边缘处应用高斯滤波器

只在边缘处应用高斯滤波器
EN

Stack Overflow用户
提问于 2021-06-07 13:04:41
回答 1查看 294关注 0票数 0

我有一个二进制掩码,如何将高斯核的标准单位偏差应用在掩码的边框上以平滑边界?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-07 15:50:22

在掩模上应用高斯模糊滤波器时,只会模糊掩码的边界。

示例:

代码语言:javascript
复制
import cv2
orig_img = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE)  # Read image as Grayscale.
blur = cv2.GaussianBlur(orig_img, (15, 15), 0)

结果:

如果您希望保持掩码不被修改,并且只平滑掩码周围的像素,我建议使用很少的迭代,并取最大值。

获取原始图像和模糊图像之间的最大值,确保原始掩码像素保持不变,因为它们的值为255 (最大可能值)。

下面是一个代码示例:

代码语言:javascript
复制
import cv2

orig_img = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE)  # Read image as Grayscale.

img = orig_img.copy()
for i in range(10):
    blur = cv2.GaussianBlur(img, (15, 15), 0)
    img = cv2.max(blur, img)  # Getting the maximum in order to mask the margins brighter

blur = cv2.max(orig_img, img)  # Getting the maximum for keeping the original mask pixels unmodified.

cv2.imshow('blur', blur)
cv2.waitKey()
cv2.destroyAllWindows()

结果:

另一种选择是在GaussianBlur之前使用形态膨胀。

代码语言:javascript
复制
import cv2

orig_img = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE)  # Read image as Grayscale.

img = cv2.dilate(orig_img, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7)))

blur = cv2.GaussianBlur(img, (15, 15), 0)

blur = cv2.max(blur, orig_img)  # Getting the maximum for keeping the original mask pixels unmodified.

cv2.imshow('blur', blur)
cv2.waitKey()
cv2.destroyAllWindows()

结果:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67872163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档