微商城网站建设案例,网站开发完没人运营,邯郸网站开发,wap是什么意思歌词提取人脸 导入所需的库创建窗口显示原始图片显示检测到的人脸创建全局变量定义字体对象定义一个函数select_image定义了extract_faces函数设置按钮运行GUI主循环运行显示 导入所需的库 tkinter#xff1a;用于创建图形用户界面。 filedialog#xff1a;用于打开文件对话框。 … 提取人脸 导入所需的库创建窗口显示原始图片显示检测到的人脸创建全局变量定义字体对象定义一个函数select_image定义了extract_faces函数设置按钮运行GUI主循环运行显示 导入所需的库 tkinter用于创建图形用户界面。 filedialog用于打开文件对话框。 cv2OpenCV库用于图像处理和计算机视觉。 PILPython Imaging Library和ImageTk用于处理和显示图像。 messagebox用于显示消息框。 subprocess用于执行系统命令。 import tkinter as tk
from tkinter import filedialog
import cv2
from PIL import Image, ImageTk
from tkinter import messagebox
import subprocess创建窗口 创建一个Tkinter窗口对象win并设置窗口的标题和大小。 win tk.Tk()
win.title(人脸提取)
win.geometry(800x650)显示原始图片 创建一个标签Label对象image_label_original用于显示原始图片。然后使用pack()方法将标签放置在窗口的左侧并设置一些填充和边距。 image_label_original tk.Label(win)
image_label_original.pack(sidetk.LEFT, padx10, pady80)显示检测到的人脸 创建另一个标签Label对象image_label_detected用于显示检测到的人脸。同样使用pack()方法将标签放置在窗口的左侧并设置一些填充和边距。 image_label_detected tk.Label(win)
image_label_detected.pack(sidetk.LEFT, padx10, pady80)创建全局变量 创建一个全局变量selected_image_path用于存储选择的图片路径。 selected_image_path None定义字体对象 定义一个字体对象my_font用于按钮和其他文本控件。 my_font (Times New Roman, 20)定义一个函数select_image 定义一个函数select_image当按钮被点击时它会打开文件选择对话框让用户选择图片。然后使用OpenCV加载图片转换颜色空间使用PIL调整图片大小并使用Tkinter显示图片。 def select_image(): - 定义一个函数当按钮被点击时会执行这个函数。 global selected_image_path 声明selected_image_path是一个全局变量这样在函数内部可以修改它的值。 selected_image_path filedialog.askopenfilename() 打开文件选择对话框让用户选择一个文件。askopenfilename()函数返回用户选择的文件路径。 img cv2.imread(selected_image_path) 使用OpenCV的imread函数从选择的文件路径中读取图片。 img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 将图片从BGR颜色空间转换到RGB颜色空间。 img_pil Image.fromarray(img_rgb) 将NumPy数组转换为PIL图像。 img_pil img_pil.resize((300, 300), Image.Resampling.LANCZOS) 使用LANCZOS插值方法将图像大小调整为300x300像素。 img_tk ImageTk.PhotoImage(imageimg_pil) 将PIL图像转换为Tkinter可以显示的PhotoImage对象。 image_label_original.config(imageimg_tk) 配置标签image_label_original以显示新加载的图片。 image_label_original.image img_tk 设置标签的image属性以便在Tkinter中显示图像。 def select_image():global selected_image_path# 打开文件选择对话框selected_image_path filedialog.askopenfilename()# 使用OpenCV加载图片img cv2.imread(selected_image_path)img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB)img_pil Image.fromarray(img_rgb)img_pil img_pil.resize((300, 300), Image.Resampling.LANCZOS) # 调整图片大小为300x300img_tk ImageTk.PhotoImage(imageimg_pil)# 显示原始图片image_label_original.config(imageimg_tk)image_label_original.image img_tk定义了extract_faces函数 if selected_image_path: - 检查selected_image_path是否已经被设置即是否已经选择了图片。 img cv2.imread(selected_image_path) 使用OpenCV的imread函数加载选择的图片。 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 将图片从BGR颜色空间转换到灰度颜色空间。 face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml) 加载预训练的人脸检测Haar级联分类器。 faces face_cascade.detectMultiScale(gray, scaleFactor1.1, minNeighbors5) 使用加载的分类器在灰度图像中检测多个人脸并返回它们的坐标和大小。 print(fDetected faces: {len(faces)}) 打印检测到的人脸数量。 if len(faces) 0: 检查是否检测到人脸。 (x, y, w, h) faces[0] 获取第一个检测到的人脸的坐标和大小。 face_img img[y:yh, x:xw] 从原始图片中裁剪出人脸区域。 face_img cv2.cvtColor(face_img, cv2.COLOR_BGR2RGB) 将裁剪的人脸图像从BGR颜色空间转换到RGB颜色空间。 face_img Image.fromarray(face_img) 将裁剪后的图像从NumPy数组转换为PIL图像。 face_img face_img.resize((300, 300), Image.Resampling.LANCZOS) 使用LANCZOS插值方法将图像大小调整为300x300像素。 face_img ImageTk.PhotoImage(face_img) 将PIL图像转换为Tkinter可以显示的PhotoImage对象。 image_label_detected.config(imageface_img) 配置标签image_label_detected以显示新的人脸图像。 image_label_detected.image face_img 设置标签的image属性以便在Tkinter中显示图像。 else: - 如果未检测到人脸执行以下代码。 messagebox.showinfo(信息, 没有检测到人脸) 显示一个消息框告知用户没有检测到人脸。 else: 如果selected_image_path未设置执行以下代码。 messagebox.showwarning(警告, 请先选择一张图片) 显示一个警告消息框告知用户需要先选择一张图片。 def extract_faces():if selected_image_path:# 使用OpenCV的人脸检测img cv2.imread(selected_image_path)gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml)faces face_cascade.detectMultiScale(gray, scaleFactor1.1, minNeighbors5)# 打印检测到的人脸数量print(fDetected faces: {len(faces)})# 如果检测到人脸裁剪并显示if len(faces) 0:(x, y, w, h) faces[0] # 获取第一个检测到的人脸print(fFace coordinates: x{x}, y{y}, w{w}, h{h})face_img img[y:yh, x:xw] # 裁剪人脸区域# 转换为PIL图像并调整大小face_img cv2.cvtColor(face_img, cv2.COLOR_BGR2RGB)face_img Image.fromarray(face_img)face_img face_img.resize((300, 300), Image.Resampling.LANCZOS) # 调整人脸图片大小为300x300face_img ImageTk.PhotoImage(face_img)image_label_detected.config(imageface_img)image_label_detected.image face_imgelse:messagebox.showinfo(信息, 没有检测到人脸)else:messagebox.showwarning(警告, 请先选择一张图片)
设置按钮 button_select tk.Button(win, text选择图片, fontmy_font, commandselect_image, fgblack): 创建一个名为button_select的按钮显示文本为选择图片字体样式为my_font按钮点击时执行select_image函数文本颜色为黑色。 button_select.place(x150, y12): 将button_select按钮放置在窗口win的特定位置横坐标为150纵坐标为12。 button_extract tk.Button(win, text提取人脸, fontmy_font, commandextract_faces, fgblack): 创建另一个名为button_extract的按钮显示文本为提取人脸字体样式为my_font按钮点击时执行extract_faces函数文本颜色为黑色。 button_extract.place(x450, y12): 将button_extract按钮放置在窗口win的特定位置横坐标为450纵坐标为12。 创建选择图片和识别人脸的按钮
button_select tk.Button(win, text选择图片, fontmy_font, commandselect_image, fgblack)
button_select.place(x150, y12)button_extract tk.Button(win, text提取人脸, fontmy_font, commandextract_faces, fgblack)
button_extract.place(x450, y12)运行GUI主循环
win.mainloop(): 进入窗口win的主事件循环使窗口显示并等待用户操作直到用户关闭窗口。
win.mainloop()运行显示 全部代码
import tkinter as tk
from tkinter import filedialog
import cv2
from PIL import Image, ImageTk
from tkinter import messagebox
import subprocesswin tk.Tk()
win.title(人脸提取)
win.geometry(800x650)image_label_original tk.Label(win)
image_label_original.pack(sidetk.LEFT, padx10, pady80)image_label_detected tk.Label(win)
image_label_detected.pack(sidetk.LEFT, padx10, pady80)selected_image_path Nonemy_font (Times New Roman, 20)def select_image():global selected_image_path# 打开文件选择对话框selected_image_path filedialog.askopenfilename()# 使用OpenCV加载图片img cv2.imread(selected_image_path)img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB)img_pil Image.fromarray(img_rgb)img_pil img_pil.resize((300, 300), Image.Resampling.LANCZOS) # 调整图片大小为300x300img_tk ImageTk.PhotoImage(imageimg_pil)# 显示原始图片image_label_original.config(imageimg_tk)image_label_original.image img_tk# 人脸检测函数
def extract_faces():if selected_image_path:# 使用OpenCV的人脸检测img cv2.imread(selected_image_path)gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml)faces face_cascade.detectMultiScale(gray, scaleFactor1.1, minNeighbors5)# 打印检测到的人脸数量print(fDetected faces: {len(faces)})# 如果检测到人脸裁剪并显示if len(faces) 0:(x, y, w, h) faces[0] # 获取第一个检测到的人脸print(fFace coordinates: x{x}, y{y}, w{w}, h{h})face_img img[y:yh, x:xw] # 裁剪人脸区域# 转换为PIL图像并调整大小face_img cv2.cvtColor(face_img, cv2.COLOR_BGR2RGB)face_img Image.fromarray(face_img)face_img face_img.resize((300, 300), Image.Resampling.LANCZOS) # 调整人脸图片大小为300x300face_img ImageTk.PhotoImage(face_img)image_label_detected.config(imageface_img)image_label_detected.image face_imgelse:messagebox.showinfo(信息, 没有检测到人脸)else:messagebox.showwarning(警告, 请先选择一张图片)# 创建选择图片和识别人脸的按钮
button_select tk.Button(win, text选择图片, fontmy_font, commandselect_image, fgblack)
button_select.place(x150, y12)button_extract tk.Button(win, text提取人脸, fontmy_font, commandextract_faces, fgblack)
button_extract.place(x450, y12)win.mainloop()