Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)

一、 高通滤波

高通滤波是对图像进行卷积操作,以保留图像中的快速变化部分(如边缘和细节),同时抑 制低频分量(如大面积平坦区域)。

应用场景

  • 边缘检测:提取物体轮廓和边界。
  • 特征提取:用于后续计算机视觉任务(如目标检测)。
  • 图像锐化:增强图像清晰度。

二、高通滤波------索贝尔算子

索贝尔算子是一种经典的边缘检测算子,通过计算像素梯度,检测图像的水平和垂直边缘。

python 复制代码
import cv2

# 读取原图
# 使用 OpenCV 读取图像,返回一个 BGR 格式的图像
img = cv2.imread('./images/waiguoren.png')

# 将原图转换为灰度图
# 灰度图是处理图像时常用的格式,它可以去除颜色信息,只保留亮度信息
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 计算水平方向的梯度
# 通过索贝尔算子计算水平方向上的变化量,即图像在 X 轴方向上的梯度
grad_x = cv2.Sobel(gray_img, cv2.CV_64F, 1, 0, ksize=3)

# 计算垂直方向的梯度
# 同样地,计算图像在 Y 轴方向上的变化量,即图像在 Y 轴方向上的梯度
grad_y = cv2.Sobel(gray_img, cv2.CV_64F, 0, 1, ksize=3)

# 计算梯度幅度
# 通过计算水平方向和垂直方向的梯度值的平方和,再开根号,得到每个像素点的梯度幅度
# 这是用来提取边缘信息的,边缘区域的梯度幅度通常较大
magnitude = cv2.magnitude(grad_x, grad_y)
magnitude = cv2.normalize(magnitude, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)

cv2.imshow('img', img)
cv2.imshow('gray_img', gray_img)
cv2.imshow('magnitude', magnitude)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、高通滤波------沙尔算子

沙尔算子是对索贝尔算子的优化版本,它在小窗口(如 3×3)中提供更高的精度。

索贝尔算子的卷积核比沙尔算子具有更强的边缘检测能力,它在水平方向和垂直方向上采用了不同的权重,更加重视邻近像素的信息。

边缘检测的灵敏度

  • 沙尔算子:由于其权重较为均匀,它对图像的边缘变化较为敏感,但可能对噪声的反应也较强,因此边缘检测的结果可能不如索贝尔算子清晰。

  • 索贝尔算子:由于其加权方式更加注重中心像素及其周围像素的梯度变化,索贝尔算子在噪声较多的情况下能提供更稳定和清晰的边缘检测结果。

应用场景

  • 沙尔算子:适用于较为干净的图像(低噪声环境),由于其结构简单,计算开销较小。

  • 索贝尔算子:在噪声较多或需要更精确边缘检测的图像处理中,索贝尔算子表现更好,常用于实际应用中。

python 复制代码
import cv2
# 读取原图
# 使用 OpenCV 读取图像,返回一个 BGR 格式的图像
img = cv2.imread('./images/waiguoren.png')

# 将原图转换为灰度图
# 灰度图是处理图像时常用的格式,它可以去除颜色信息,只保留亮度信息
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 计算水平方向的梯度
# 通过索贝尔算子计算水平方向上的变化量,即图像在 X 轴方向上的梯度
grad_x = cv2.Scharr(gray_img, cv2.CV_64F, 1, 0)

# 计算垂直方向的梯度
# 同样地,计算图像在 Y 轴方向上的变化量,即图像在 Y 轴方向上的梯度
grad_y = cv2.Scharr(gray_img, cv2.CV_64F, 0, 1)

# 计算梯度幅度
# 通过计算水平方向和垂直方向的梯度值的平方和,再开根号,得到每个像素点的梯度幅度
# 这是用来提取边缘信息的,边缘区域的梯度幅度通常较大
magnitude = cv2.magnitude(grad_x, grad_y)
magnitude = cv2.normalize(magnitude, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)

cv2.imshow('img', img)
cv2.imshow('gray_img', gray_img)
cv2.imshow('magnitude', magnitude)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、高通滤波------拉普拉斯算子

拉普拉斯算子是一种二阶微分算子。它的作用是计算图像中像素值的变化率,从而识别图像 中的边缘。

不再以x和y的方向计算,而是以圆方向计算变化率。因此不需要Gx+Gy。

特点

  • 边缘检测:拉普拉斯算子常常用作边缘检测的基础方法之一。

  • 图像增强:拉普拉斯算子有时被用来增强图像细节,去除模糊部分,提高图像的清晰度。

高通滤波器的对比与应用场景

算子 特点 适用场景
索贝尔 结合一阶导数,能检测水平和垂直边缘 边缘检测、特征提取
沙尔 索贝尔的改进版,适合处理高频变化区域,精度更高 精细边缘检测
拉普拉斯 二阶导数算子,检测方向无关的边缘,灵敏度高 图像锐化、边缘增强

python 复制代码
import cv2
import os

# 图片文件夹位置
dog_directory = "./dog"

# 遍历文件夹中的所有图片
image_paths = []
for filename in os.listdir(dog_directory):
    # 获取文件完整路径
    filepath = os.path.join(dog_directory, filename)
    # 检查文件是否为图片格式
    if not filename.lower().endswith(('.png', '.jpg', '.jpeg')):
        continue
    # 读取图片
    img = cv2.imread(filepath)
    # 将图像转灰度
    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    #  应用拉普拉斯算子,计算图像方差
    laplacian = cv2.Laplacian(gray_img, cv2.CV_64F)
    variance  = laplacian.var()
    print(f"Image: {filename}, Variance: {variance}")

    if variance < 300:
        image_paths.append(filepath)


image_paths
python 复制代码
Image: 1.png, Variance: 2113.8365566209127
Image: 2.png, Variance: 248.99712459101005
Image: 3.png, Variance: 1420.862992791666
Image: 4.png, Variance: 153.0638792511676
['./dog\\2.png', './dog\\4.png']

五、图像浮雕与特效处理

图像浮雕特效是仿造浮雕艺术而衍生的处理,它将要呈现的图像突起于石头表面,根据凹凸程度不同形成三维的立体效果。Python绘制浮雕图像是通过勾画图像的轮廓,并降低周围的像素值,从而产生一张具有立体感的浮雕效果图。

5.1、图像浮雕

python 复制代码
dst = filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])

参数:

  • src表示输入图像
  • ddepth表示目标图像所需的深度
  • kernel表示卷积核,一个单通道浮点型矩阵
python 复制代码
import cv2
import numpy as np
img=cv2.imread('./images/waiguoren.png')

# 转为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 浮雕
# 第一个参数 输入图像
# 第二个参数 -1 表示输出图像与输入图像具有相同的深度
# 第三个参数 卷积核,浮雕卷积核
# 第四个参数 dst 输出图像,默认是 None
embossed_img = cv2.filter2D(gray_img, -1, np.array([[-2, -1, 0], [-1, 1, 1], [0, 1, 2]]), dst=gray_img)


# 显示结果
cv2.imshow('img', img)
cv2.imshow('img_gray', img_gray)
cv2.imshow('embossed_img', embossed_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

5.2、油画效果

油画效果使图像看起来像是由油画笔刷绘制的,通常使用平滑化和颜色混合来实现。

python 复制代码
cv2.xphoto.oilPainting(src, (size, dyn_ratio))

参数:

  • src:输入图像。

  • (size, dyn_ratio):大小和动态比例,影响油画效果的强度和样式。

python 复制代码
import cv2
import numpy as np
img=cv2.imread('./images/waiguoren.png')

# 转为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 油画效果
oil_img = cv2.xphoto.oilPainting(img,7,20)

# 显示结果
cv2.imshow('img', img)
cv2.imshow('img_gray', img_gray)
cv2.imshow('oil_img', oil_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

5.3、彩色映射

彩色映射通过将图像的灰度值映射到不同的颜色范围,创造不同的视觉效果。例如,可以使用伪彩色来增强图像的表现力。

python 复制代码
dst = cv2.applyColorMap(src, colormap)

参数:

  • src:灰度图像。

  • colormap:选择的颜色映射类型。

python 复制代码
import cv2
import numpy as np
img=cv2.imread('./images/waiguoren.png')

# 转为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 彩色映射
color_img = cv2.applyColorMap(img, cv2.COLORMAP_HSV)

# 显示结果
cv2.imshow('img', img)
cv2.imshow('img_gray', img_gray)
cv2.imshow('color_img', color_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

5.4、镜像效果

镜像效果是通过将图像进行水平或垂直翻转,来创建对称图像的一种方式。

python 复制代码
dst = cv2.flip(src, flipCode)

参数:

  • src:输入图像。

  • flipCode:翻转类型。1表示水平翻转,0表示垂直翻转,-1表示水平和垂直都翻转。

python 复制代码
import cv2
import numpy as np
img=cv2.imread('./images/waiguoren.png')

# 转为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 镜像
flip_img = cv2.flip(img,-1)

# 显示结果
cv2.imshow('img', img)
cv2.imshow('img_gray', img_gray)
cv2.imshow('flip_img', flip_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

5.5、油画效果和浮雕结合

python 复制代码
import cv2
import numpy as np
img=cv2.imread('./images/waiguoren.png')

# 转为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 浮雕
embossed_img = cv2.filter2D(gray_img, -1, np.array([[-2, -1, 0], [-1, 1, 1], [0, 1, 2]]), dst=gray_img)
# 油画
combined = cv2.xphoto.oilPainting(embossed_img,7,20)

# 显示结果
cv2.imshow('img', img)
cv2.imshow('img_gray', img_gray)
cv2.imshow('combined', combined)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
董厂长33 分钟前
langchain :记忆组件混淆概念澄清 & 创建Conversational ReAct后显示指定 记忆组件
人工智能·深度学习·langchain·llm
亿牛云爬虫专家1 小时前
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
分布式·python·架构·kubernetes·爬虫代理·监测·采集
G皮T4 小时前
【人工智能】ChatGPT、DeepSeek-R1、DeepSeek-V3 辨析
人工智能·chatgpt·llm·大语言模型·deepseek·deepseek-v3·deepseek-r1
九年义务漏网鲨鱼4 小时前
【大模型学习 | MINIGPT-4原理】
人工智能·深度学习·学习·语言模型·多模态
元宇宙时间4 小时前
Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
人工智能·去中心化·区块链
开发者工具分享4 小时前
文本音频违规识别工具排行榜(12选)
人工智能·音视频
产品经理独孤虾5 小时前
人工智能大模型如何助力电商产品经理打造高效的商品工业属性画像
人工智能·机器学习·ai·大模型·产品经理·商品画像·商品工业属性
老任与码5 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
nananaij5 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm