用中文详细解释能够实现实现基本的图像界面,图像上传,结果保存,黑白处理,反色处理,亮度变化,磨皮,素描,瘦脸的完整python代码
时间: 2024-03-15 15:45:56 浏览: 99
python图像处理之反色实现方法
好的,以下是能够实现基本的图像界面,图像上传,结果保存,黑白处理,反色处理,亮度变化,磨皮,素描,瘦脸的完整Python代码:
```python
import cv2
import numpy as np
import tkinter as tk
from tkinter import filedialog
# 创建GUI界面
root = tk.Tk()
root.title("图像处理工具")
# 定义函数:打开图片
def open_file():
file_path = filedialog.askopenfilename(title="选择图片", filetypes=[("Image Files", "*.png *.jpg *.bmp")])
img = cv2.imread(file_path)
cv2.imshow("原图", img)
# 定义函数:保存图片
def save_file():
save_path = filedialog.asksaveasfilename(title="保存图片", filetypes=[("Image Files", "*.png *.jpg *.bmp")])
cv2.imwrite(save_path, img)
# 定义函数:黑白处理
def gray_process():
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("黑白图", gray_img)
# 定义函数:反色处理
def invert_process():
invert_img = cv2.bitwise_not(img)
cv2.imshow("反色图", invert_img)
# 定义函数:亮度变化
def brightness_process():
alpha = 1.5
beta = 30
brightness_img = cv2.addWeighted(img, alpha, np.zeros(img.shape, dtype=img.dtype), 0, beta)
cv2.imshow("亮度变化图", brightness_img)
# 定义函数:磨皮
def blur_process():
blur_img = cv2.GaussianBlur(img, (0, 0), 15)
cv2.imshow("磨皮图", blur_img)
# 定义函数:素描
def pencil_process():
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
invert_img = cv2.bitwise_not(gray_img)
pencil_img = cv2.GaussianBlur(invert_img, (21, 21), 0)
pencil_img = cv2.divide(gray_img, 255 - pencil_img, scale=256)
cv2.imshow("素描图", pencil_img)
# 定义函数:瘦脸
def face_process():
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray_img, scaleFactor=1.1, minNeighbors=5)
for (x, y, w, h) in faces:
face_img = img[y:y+h, x:x+w]
face_img = cv2.GaussianBlur(face_img, (51, 51), 0)
img[y:y+h, x:x+w] = face_img
cv2.imshow("瘦脸图", img)
# 创建子窗口
sub_root = tk.Toplevel(root)
sub_root.title("图片处理")
# 创建按钮:保存图片
save_button = tk.Button(sub_root, text="保存图片", command=save_file)
save_button.pack()
# 创建按钮:黑白处理
gray_button = tk.Button(sub_root, text="黑白处理", command=gray_process)
gray_button.pack()
# 创建按钮:反色处理
invert_button = tk.Button(sub_root, text="反色处理", command=invert_process)
invert_button.pack()
# 创建按钮:亮度变化
brightness_button = tk.Button(sub_root, text="亮度变化", command=brightness_process)
brightness_button.pack()
# 创建按钮:磨皮
blur_button = tk.Button(sub_root, text="磨皮", command=blur_process)
blur_button.pack()
# 创建按钮:素描
pencil_button = tk.Button(sub_root, text="素描", command=pencil_process)
pencil_button.pack()
# 创建按钮:瘦脸
face_button = tk.Button(sub_root, text="瘦脸", command=face_process)
face_button.pack()
# 创建按钮:打开图片
open_button = tk.Button(root, text="打开图片", command=open_file)
open_button.pack()
# 创建GUI界面循环
root.mainloop()
```
其中,图像处理的具体实现方式如下:
- 黑白处理:使用cv2.cvtColor()函数将图片转为灰度图。
- 反色处理:使用cv2.bitwise_not()函数将图片取反。
- 亮度变化:使用cv2.addWeighted()函数实现图片的亮度变化。
- 磨皮:使用cv2.GaussianBlur()函数实现图片的磨皮效果。
- 素描:先将图片转为灰度图,然后使用cv2.bitwise_not()函数将图片取反,再使用cv2.GaussianBlur()函数实现模糊效果,最后使用cv2.divide()函数实现素描效果。
- 瘦脸:使用cv2.CascadeClassifier()函数加载人脸识别分类器,使用cv2.cvtColor()函数将图片转为灰度图,使用cv2.detectMultiScale()函数识别人脸位置,使用cv2.GaussianBlur()函数实现瘦脸效果。
阅读全文