文章目录
一、毛玻璃滤镜核心代码
新建 glass_effect.py 文件
import cv2
import numpy as np
original_image = cv2.imread('5.jpg')
# 新建目标图像
glass_effect_img = np.zeros_like(original_image)
# 获取图像的行和列
original_rows, original_cols = original_image.shape[:2]
# 定义偏移量和随机数
glass_effect_offsets = 5
glass_effect_random_num = 0
# 毛玻璃效果:像素点邻域内,随机像素点颜色替代当前像素点的颜色
for glass_y in range(original_rows - glass_effect_offsets):
for glass_x in range(original_cols - glass_effect_offsets):
glass_effect_random_num = np.random.randint(0, glass_effect_offsets)
glass_effect_img[glass_y, glass_x] = \
original_image[glass_y + glass_effect_random_num, glass_x + glass_effect_random_num]
# 处理完成,显示图像
cv2.imshow('original_image', original_image)
cv2.imshow('glass_effect_image', glass_effect_img)
cv2.waitKey()
cv2.destroyAllWindows()
代码思想:使用当前像素周围临近的随机一个像素值(也可能是当前像素本身)取代当前像素值。以达到一种通过毛玻璃看场景的滤镜效果。
效果如下图所示:
二、UI 界面添加
1.更改glass_effect.py文件
def glasseffect_fun(instance):
# 读取原始图像
original_image = instance.m_image
# 处理完成,显示图像
#cv2.imshow('original_image', original_image)
#cv2.imshow('glass_effect_image', glass_effect_img)
#cv2.waitKey()
#cv2.destroyAllWindows()
instance.m_image = glass_effect_img
instance.updata_image()
2.在对应UI.py文件中添加action
添加 action;新增选项; 连接函数
#创建一个action,当该action被触发时显示毛玻璃特效处理后的图片
action_glass_img_show = QAction('&毛玻璃滤镜', instance)
action_glass_img_show.triggered.connect(instance.glass_effect_emit)
#艺术风格迁移选项新增一个action:毛玻璃滤镜
tempMenu.addAction(action_glass_img_show)
3.在主UI.py文件中添加信号发射函数
首先引入相应模块
from part3 import m_init_style_transfer,glass_effect
定义信号发射函数
def glass_effect_emit(self):
glass_effect.glasseffect_fun(self)
效果如下
三、有待改进
由于采用周边像素进行图像风格变化,右侧与下侧的像素点会出现无匹配而变为黑色的情况,这种情况还需要完善代码来改进效果。
四、参考链接
参考链接:图像处理:毛玻璃特效