Skip to content
Kangvcar edited this page Feb 11, 2023 · 5 revisions

基于Python OpenCV的图像算法研究

本项目旨在帮助您深入了解图像处理的各种算法,并使用 Python OpenCV 库实现这些算法。

您可以在 main.py 文件中找到 60 多种图像处理算法的详细说明,并且各个函数功能高度解耦,可以单独运行。

研究背景

图像处理是计算机视觉和图像识别领域中非常重要的研究方向。随着深度学习算法的发展,图像处理技术在很多领域得到了广泛的应用,Python OpenCV 是一个开源的图像处理库,提供了大量的图像处理算法,是图像处理领域中的重要工具。

本项目旨在利用 Python OpenCV 库,研究多种图像处理算法的原理和实现方法,并实现了一个图像处理工具集。通过对图像处理算法的研究,不仅提高了我们的技术水平,也为以后的图像处理项目提供了重要的基础。

实验环境

  • Python 3.7
  • OpenCV 4.4.0
  • Numpy

运行示例

⚡运行本项目代码前请执行以下命令安装所依赖的库

pip install opencv-python
pip install numpy
pip install Pillow

Python 代码如下(直接运行):

import tkinter as tk
from tkinter import filedialog
import cv2
import numpy as np
import os
from PIL import Image, ImageTk
import os

# 检查文件夹是否存在,如果不存在则创建一个文件夹
if not os.path.exists('result'):
    os.makedirs('result')

def select_image():
    """
    点击选择图片按钮时调用的函数,用于选择图像并显示在窗口中
    """
    global image_path
    # 使用filedialog模块弹出选择文件对话框,获取选择的图像路径
    image_path = filedialog.askopenfilename()
    # 使用OpenCV读取图像
    img = cv2.imread(image_path)
    # 将OpenCV读取的BGR图像转换为RGB图像
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    # 将图像转换为PIL图像
    img = Image.fromarray(img)
    # 将PIL图像转换为可以在Tkinter窗口中显示的图像
    img = ImageTk.PhotoImage(img)
    # 使用config()函数更新显示图像的标签的图像
    input_label.config(image=img)
    # 将图像存储在input_label变量中,以防图像被GC回收
    input_label.image = img

def process_image():
    # 声明全局变量 output_img
    global output_img
    # 使用 cv2.imread 读取图片
    img = cv2.imread(image_path)
    # 调用 translate_image 函数进行平移变换
    output_img = translate_image(img)
    # 将 BGR 格式图片转换为 RGB 格式
    output_img = cv2.cvtColor(output_img, cv2.COLOR_BGR2RGB)
    # 将 numpy 数组格式图片转换为 Image 对象
    output_img = Image.fromarray(output_img)
    # 将 Image 对象转换为 Tkinter 可用的 PhotoImage 对象
    output_img = ImageTk.PhotoImage(output_img)
    # 配置输出图片的 Label 组件,将处理后的图片显示在该组件上
    output_label.config(image=output_img)
    # 更新 output_label.image 属性的值
    output_label.image = output_img
    # 使用 cv2.imwrite 函数将处理后的图片保存到 result 文件夹中
    cv2.imwrite("result/result.jpg", output_img)


def translate_image(img):
    # 获取图像的行数和列数
    rows, cols = img.shape[:2]
    # 创建一个移动矩阵
    M = np.float32([[1,0,100],[0,1,50]])
    # 应用仿射变换到图像上
    output_img = cv2.warpAffine(img, M, (cols, rows))
    # 返回处理后的图像
    return output_img


# 创建窗口
root = tk.Tk()
# 设置窗口标题
root.title("图像处理器")

# 创建输入图像标签
input_label = tk.Label(root)
# 将标签放置在左侧
input_label.pack(side="left")

# 创建输出图像标签
output_label = tk.Label(root)
# 将标签放置在右侧
output_label.pack(side="right")

# 创建选择图像按钮
select_button = tk.Button(root, text="选择图像", command=select_image)
# 将按钮放置在窗口中
select_button.pack()

# 创建处理图像按钮
process_button = tk.Button(root, text="开始处理", command=process_image)
# 将按钮放置在窗口中
process_button.pack()

# 运行主循环
root.mainloop()

main.py 文件中项目中的各个功能模块包含详细的说明,各个函数功能高度解耦可独立运行,获取完整版60+种图像处理算法。

基础版

下载基础版

  • 每次支持处理一个图像
  • 支持的4种算法包括:平移变换、尺度变换、旋转变换、仿射变换

完整版

获取完整版后可获得如下服务:

  • “图像处理工具集 - 完整版” 程序(Windows 版)
  • “图像处理工具集 - 完整版” 程序(MacOS 版可联系作者制作)
  • 完整版支持批处理,一次处理多张图像
  • 完整版支持所有60+种图像处理算法
  • 一键完成60+种不同的处理算法图像处理
  • 可联系作者获取源代码文件

gui

实验结果

实验成果将会存放在该项目的result文件夹下,包括处理后图像的展示等。

总结

在本项目中,我们使用Python OpenCV库,研究了多种图像处理算法,并实现了这些算法,得到了实验结果。本项目的实验结果可以作为未来研究的参考,并且可以用于更多的图像处理相关的研究