Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十一 简单毛玻璃效果

目录

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十一 简单毛玻璃效果

一、简单介绍

二、简单毛玻璃效果实现原理

三、简单颜色反转效果案例实现简单步骤

四、注意事项


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

这里使用 Python  基于 OpenCV 进行视觉图像处理,......

二、简单毛玻璃效果实现原理

毛玻璃是一种半透明的玻璃材料,表面上布满了微小的凹凸颗粒。由于这些微小颗粒的存在,透过毛玻璃的光线会被散射,使得透过的图像变得模糊而柔和,同时也有一定程度的保护隐私的作用。

在图像处理中,模拟毛玻璃效果意味着对图像进行一定程度的模糊处理,以模拟透过毛玻璃所看到的图像效果。通常,毛玻璃效果会对图像的每个像素周围的邻域进行随机采样,并将该区域内的像素值随机选取为当前像素值,从而模拟玻璃表面上微小颗粒的效果。这样处理后的图像会显得更加模糊、柔和,类似于透过毛玻璃所看到的效果。

实现原理:

三、简单颜色反转效果案例实现简单步骤

1、编写代码

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十一 简单毛玻璃效果-LMLPHP

2、运行效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十一 简单毛玻璃效果-LMLPHP

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()

四、注意事项

  1. 邻域半径radius决定了模糊程度,半径越大效果越模糊。
  2. 需要注意边界处理,确保采样像素位于图像范围内,避免越界访问。
  3. 随机采样的过程可能导致每次处理的结果不同,这是正常的。可以通过调整随机数种子或增加迭代次数来控制结果的随机性。
04-03 08:44