欢迎访问宙启技术站
智能推送

使用Python编写一个简单的图片滤镜应用

发布时间:2023-12-04 10:47:29

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函数关闭所有打开的窗口。

使用上述代码,我们可以很方便地为图片应用各种滤镜效果,提供了简单但强大的图片处理能力。