使用Python编写一个简单的图片滤镜应用
import cv2
import numpy as np
def apply_filter(image, filter_type):
"""Apply a filter to the input image"""
filtered_image = None
if filter_type == 'grayscale':
filtered_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
elif filter_type == 'sepia':
filtered_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
filtered_image = np.array([[0.272, 0.534, 0.131],
[0.349, 0.686, 0.168],
[0.393, 0.769, 0.189]]) @ filtered_image.T
filtered_image = filtered_image.T
elif filter_type == 'blur':
filtered_image = cv2.blur(image, (5, 5))
elif filter_type == 'sharpen':
kernel = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
filtered_image = cv2.filter2D(image, -1, kernel)
return filtered_image
# 使用例子
if __name__ == '__main__':
# 读取原始图片
image = cv2.imread('image.jpg')
# 应用滤镜:灰度化
filtered_image = apply_filter(image, 'grayscale')
# 显示滤镜结果
cv2.imshow('Grayscale Image', filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 应用滤镜:油画效果
filtered_image = apply_filter(image, 'sepia')
# 显示滤镜结果
cv2.imshow('Sepia Image', filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 应用滤镜:模糊
filtered_image = apply_filter(image, 'blur')
# 显示滤镜结果
cv2.imshow('Blurred Image', filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 应用滤镜:锐化
filtered_image = apply_filter(image, 'sharpen')
# 显示滤镜结果
cv2.imshow('Sharpened Image', filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在上述代码中,我们首先定义了一个apply_filter函数,该函数接受一个输入图像和滤镜类型作为参数,并返回应用相应滤镜后的图像。然后,我们通过OpenCV库的cv2.imread函数读取了一张图片作为输入。
然后,我们调用apply_filter函数分别应用了四种滤镜,即灰度化、油画效果、模糊和锐化。对于每种滤镜,我们使用cv2.imshow函数将应用滤镜后的图像显示在屏幕上。
最后,我们通过cv2.waitKey(0)等待用户按下任意键盘按键来关闭显示窗口,并使用cv2.destroyAllWindows函数关闭所有打开的窗口。
使用上述代码,我们可以很方便地为图片应用各种滤镜效果,提供了简单但强大的图片处理能力。
