现在位置: 首页 > OpenCV 教程 > 正文

OpenCV 简单滤镜效果

OpenCV提供了丰富的图像处理和计算机视觉算法,广泛应用于图像处理、视频分析、物体检测等领域。

本文将介绍如何使用 OpenCV 实现几种简单的滤镜效果,包括灰度、怀旧和浮雕效果。

以下是主要滤镜效果:

滤镜效果实现方法
灰度滤镜cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
怀旧滤镜通过调整色彩通道的权重,模拟老照片效果。
浮雕滤镜使用卷积核 [[-2, -1, 0], [-1, 1, 1], [0, 1, 2]] 进行卷积操作。
模糊滤镜cv2.GaussianBlur(image, (15, 15), 0)
锐化滤镜使用卷积核 [[0, -1, 0], [-1, 5, -1], [0, -1, 0]] 进行卷积操作。
边缘检测滤镜cv2.Canny(gray_image, 100, 200)

1、灰度滤镜

灰度滤镜是最简单的滤镜之一,它将彩色图像转换为灰度图像。

灰度图像只有一个通道,每个像素的值表示亮度。

实现步骤

  1. 读取图像。
  2. 使用 cv2.cvtColor() 函数将图像从 BGR 颜色空间转换为灰度颜色空间。

实例

import cv2

# 读取图像
image = cv2.imread('input.jpg')

# 转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 保存灰度图像
cv2.imwrite('gray_output.jpg', gray_image)

# 显示灰度图像
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码解析:

  • cv2.imread('input.jpg'):读取图像文件。
  • cv2.cvtColor(image, cv2.COLOR_BGR2GRAY):将图像从 BGR 颜色空间转换为灰度颜色空间。
  • cv2.imwrite('gray_output.jpg', gray_image):保存灰度图像。
  • cv2.imshow('Gray Image', gray_image):显示灰度图像。

2、怀旧滤镜

怀旧滤镜通过调整图像的色彩通道,使图像呈现出一种复古的效果。

通常,怀旧滤镜会增加红色和绿色通道的强度,同时减少蓝色通道的强度。

实现步骤

  1. 读取图像。
  2. 分离图像的 BGR 通道。
  3. 调整各个通道的强度。
  4. 合并通道,生成怀旧效果的图像。

实例

import cv2
import numpy as np

# 读取图像
image = cv2.imread('input.jpg')

# 分离 BGR 通道
b, g, r = cv2.split(image)

# 调整通道强度
r = np.clip(r * 0.393 + g * 0.769 + b * 0.189, 0, 255).astype(np.uint8)
g = np.clip(r * 0.349 + g * 0.686 + b * 0.168, 0, 255).astype(np.uint8)
b = np.clip(r * 0.272 + g * 0.534 + b * 0.131, 0, 255).astype(np.uint8)

# 合并通道
vintage_image = cv2.merge((b, g, r))

# 保存怀旧图像
cv2.imwrite('vintage_output.jpg', vintage_image)

# 显示怀旧图像
cv2.imshow('Vintage Image', vintage_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码解析:

  • cv2.split(image):分离图像的 BGR 通道。
  • np.clip():确保像素值在 0 到 255 之间。
  • cv2.merge((b, g, r)):合并调整后的通道,生成怀旧效果的图像。

3、浮雕滤镜

浮雕滤镜通过计算图像中相邻像素的差值,生成一种类似于浮雕的效果,这种滤镜通常用于增强图像的边缘和纹理。

实现步骤

  1. 读取图像。
  2. 将图像转换为灰度图像。
  3. 使用卷积核计算浮雕效果。

实例

import cv2
import numpy as np

# 读取图像
image = cv2.imread('input.jpg')

# 转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 定义卷积核
kernel = np.array([[-2, -1, 0],
                   [-1,  1, 1],
                   [ 0,  1, 2]])

# 应用卷积核
emboss_image = cv2.filter2D(gray_image, -1, kernel)

# 保存浮雕图像
cv2.imwrite('emboss_output.jpg', emboss_image)

# 显示浮雕图像
cv2.imshow('Emboss Image', emboss_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码解析:

  • cv2.cvtColor(image, cv2.COLOR_BGR2GRAY):将图像转换为灰度图像。
  • cv2.filter2D(gray_image, -1, kernel):应用卷积核,生成浮雕效果。

4、模糊滤镜

模糊滤镜通过平滑图像,减少图像中的噪声和细节。

实例

import cv2

# 读取图像
image = cv2.imread("path/to/image.jpg")

# 模糊滤镜
blurred_image = cv2.GaussianBlur(image, (15, 15), 0)

# 显示结果
cv2.imshow("Blur Filter", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

5、锐化滤镜

锐化滤镜通过增强图像的边缘,使图像更加清晰。

实例

import cv2
import numpy as np

# 读取图像
image = cv2.imread("path/to/image.jpg")

# 锐化滤镜
sharpen_kernel = np.array([[0, -1, 0],
                           [-1, 5, -1],
                           [0, -1, 0]])
sharpened_image = cv2.filter2D(image, -1, sharpen_kernel)

# 显示结果
cv2.imshow("Sharpen Filter", sharpened_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

6、边缘检测滤镜

边缘检测滤镜通过检测图像中的边缘,突出显示物体的轮廓。

实例

import cv2

# 读取图像
image = cv2.imread("path/to/image.jpg")

# 转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 边缘检测滤镜
edges_image = cv2.Canny(gray_image, 100, 200)

# 显示结果
cv2.imshow("Edges Filter", edges_image)
cv2.waitKey(0)
cv2.destroyAllWindows()