【opencv】边缘高斯模糊(canny+dilate+GaussianBlur)Python实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a19990412/article/details/86603100

简述

在Cartoon GAN的实现中提到了这种思想。但是在网上没有找到对应的实现,就自己研究了一波。

处理思路

  • Canny边缘提取
  • 用dilate做膨化,用一个粗颗粒,再用一个细颗粒
  • 粗颗粒的膨化结果用于提取原图像,之后,再做高斯模糊
  • 细颗粒的膨化结果用于定位覆盖掉原图像的结果,将边缘部分贴回去

效果展示

处理前 处理后
在这里插入图片描述 在这里插入图片描述

代码

import cv2

img = cv2.imread('corgi.jpg')
data = (150, 150)
img_copy = img.copy()
imgCanny = cv2.Canny(img, *data)
# 创建矩形结构
g = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
g2 = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
# 膨化处理
# 更细腻
img_dilate = cv2.dilate(imgCanny, g)
# 更粗大
img_dilate2 = cv2.dilate(imgCanny, g2)

shape = img_dilate.shape
# 提取
for i in range(shape[0]):
    for j in range(shape[1]):
        if img_dilate2[i, j] == 0:  # 二维定位到三维
            img[i, j] = [0, 0, 0]

dst = cv2.GaussianBlur(img, (3, 3), 0, 0, cv2.BORDER_DEFAULT)

for i in range(shape[0]):
    for j in range(shape[1]):
        if img_dilate[i, j] != 0:  # 二维定位到三维
            img_copy[i, j] = dst[i, j]

cv2.imshow('dst', img_copy)
cv2.imwrite('corgi-edge-blur.png', img_copy)
cv2.waitKey()
cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/a19990412/article/details/86603100
今日推荐