Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十一 简单毛玻璃效果
目录
Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十一 简单毛玻璃效果
一、简单介绍
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。
这里使用 Python 基于 OpenCV 进行视觉图像处理,......
二、简单毛玻璃效果实现原理
毛玻璃是一种半透明的玻璃材料,表面上布满了微小的凹凸颗粒。由于这些微小颗粒的存在,透过毛玻璃的光线会被散射,使得透过的图像变得模糊而柔和,同时也有一定程度的保护隐私的作用。
在图像处理中,模拟毛玻璃效果意味着对图像进行一定程度的模糊处理,以模拟透过毛玻璃所看到的图像效果。通常,毛玻璃效果会对图像的每个像素周围的邻域进行随机采样,并将该区域内的像素值随机选取为当前像素值,从而模拟玻璃表面上微小颗粒的效果。这样处理后的图像会显得更加模糊、柔和,类似于透过毛玻璃所看到的效果。
实现原理:
三、简单颜色反转效果案例实现简单步骤
1、编写代码
2、运行效果
3、具体代码
"""
简单毛玻璃效果
1、读取图像:使用OpenCV的cv2.imread()函数读取图像文件。
2、毛玻璃处理:对图像的每个像素周围的邻域进行随机采样,并将该区域内的像素值随机选取为当前像素值,以模拟毛玻璃效果。
3、显示图像:使用OpenCV的cv2.imshow()函数显示处理后的图像,或将处理后的图像保存为新的图像文件。
"""
import cv2
import numpy as np
import random
def glass_effect(image, radius=5):
"""
毛玻璃效果
:param image:原图
:param radius:邻域半径
:return:
"""
height, width = image.shape[:2]
result = np.copy(image)
for y in range(height):
for x in range(width):
rand_y = int(random.uniform(y - radius, y + radius))
rand_x = int(random.uniform(x - radius, x + radius))
# 边界处理
rand_y = min(height - 1, max(0, rand_y))
rand_x = min(width - 1, max(0, rand_x))
result[y, x] = image[rand_y, rand_x]
return result
def main():
# 读取图像
image = cv2.imread('Images/DogFace.jpg')
# 应用毛玻璃效果
blurred_image = glass_effect(image, radius=5)
# 设置窗口属性,并显示图片
cv2.namedWindow("Dog", cv2.WINDOW_KEEPRATIO)
cv2.imshow('Dog', image)
# 设置窗口属性,并显示图片
cv2.namedWindow("GroundGlassEffect", cv2.WINDOW_KEEPRATIO)
cv2.imshow('GroundGlassEffect', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
四、注意事项
- 邻域半径
radius
决定了模糊程度,半径越大效果越模糊。 - 需要注意边界处理,确保采样像素位于图像范围内,避免越界访问。
- 随机采样的过程可能导致每次处理的结果不同,这是正常的。可以通过调整随机数种子或增加迭代次数来控制结果的随机性。