基于opencv的车辆识别系统

车辆画框

使用OpenCV和Tkinter库来创建一个简单的图形用户界面(GUI),用户可以通过这个界面选择一张图片,并使用Haar级联分类器来检测图片中的汽车。


导入所需的库

cv2 是OpenCV库,用于图像处理;os 提供了一种方便的方式来使用操作系统依赖的功能;numpy 是一个强大的数学库,用于进行数值计算;PIL(Pillow)和ImageTk 用于图像处理和与Tkinter的兼容;Tk, filedialog, Button, Label, Canvas, NW 都是Tkinter库的一部分,用于创建GUI。

python 复制代码
import cv2
import os
import numpy as np
from PIL import Image, ImageTk
from tkinter import Tk, filedialog, Button, Label, Canvas, NW

加载Haar级联分类器

一个预训练的模型,用于检测图像中的汽车。

python 复制代码
car_cascade = cv2.CascadeClassifier('haarcascade_car.xml')

主程序

python 复制代码
def detect_cars_in_image():

定义一个函数 detect_cars_in_image,用于处理图像并检测其中的汽车。

python 复制代码
		file_path = filedialog.askopenfilename()

弹出一个文件选择对话框,允许用户选择一个图像文件,并获取文件的路径。

python 复制代码
		if file_path:

检查是否选择了文件。

python 复制代码
		img = Image.open(file_path)

使用PIL库打开选择的图像文件。

python 复制代码
		img_cv = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)

将图像转换为NumPy数组,并将其从RGB颜色空间转换为BGR颜色空间,因为OpenCV使用BGR。

python 复制代码
		gray = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY)

将图像转换为灰度图,因为Haar级联分类器通常在灰度图像上进行训练和检测。

python 复制代码
		cars = car_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=4)

使用Haar级联分类器检测灰度图像中的汽车,返回检测到的汽车的边界框列表。

python 复制代码
		for (x, y, w, h) in cars:
			cv2.rectangle(img_cv, (x, y), (x + w, y + h), (0, 0, 255), 2)

遍历检测到的每个汽车边界框,并在原始图像上绘制红色矩形框。

python 复制代码
		img = Image.fromarray(cv2.cvtColor(img_cv, cv2.COLOR_BGR2RGB))

将处理后的图像转换回RGB颜色空间,并转换回PIL图像格式。

python 复制代码
		img = img.resize((600, 500), Image.LANCZOS)

调整图像大小以适应画布。

python 复制代码
		img_tk = ImageTk.PhotoImage(img)

创建一个Tkinter兼容的图像对象。

python 复制代码
		canvas.create_image(0, 0, anchor=NW, image=img_tk)

在画布上显示图像。

python 复制代码
		canvas.image = img_tk

保持对图像对象的引用,防止它被垃圾回收。

python 复制代码
		root.update()

更新Tkinter窗口以显示新图像。

python 复制代码
root = Tk()
root.title("Car Detection")

创建Tkinter窗口,并设置标题为 "Car Detection"。

python 复制代码
canvas = Canvas(root, width=600, height=500)
canvas.pack()

创建一个600x500大小的画布,并将其添加到窗口中。

python 复制代码
label = Label(root, text="Click the button to select an image.")
label.pack(pady=10)

创建一个标签,提示用户点击按钮选择图像,并将其添加到窗口中。

python 复制代码
button = Button(root, text="Select Image", command=detect_cars_in_image)
button.pack(pady=5)

创建一个按钮,当点击时调用 detect_cars_in_image 函数,并将其添加到窗口中。

python 复制代码
root.mainloop()

启动Tkinter事件循环,这样用户界面就可以响应用户的操作了。

相关推荐
会挠头但不秃几秒前
深度学习(5)循环神经网络
人工智能·rnn·深度学习
乐迪信息1 分钟前
乐迪信息:AI摄像机识别煤矿出入井车辆数量异常检测
大数据·运维·人工智能·物联网·安全
_OP_CHEN3 分钟前
用极狐 CodeRider-Kilo 开发俄罗斯方块:AI 辅助编程的沉浸式体验
人工智能·vscode·python·ai编程·ai编程插件·coderider-kilo
这张生成的图像能检测吗3 分钟前
(论文速读)LCT:用于RGB-D突出物体检测的轻型跨模态变压器
图像处理·目标检测·计算机视觉·深度估计·轻量化模型·跨模态融合·rgb-d
代码洲学长5 分钟前
卷积神经网络CNN
人工智能·神经网络·cnn
l1t8 分钟前
利用小米mimo为精确覆盖矩形问题C程序添加打乱函数求出更大的解
c语言·开发语言·javascript·人工智能·算法
weixin_398187758 分钟前
YOLOv11 轻量级移动端网络ShuffleNetV2集成指南(详注)
人工智能·yolo
_Li.11 分钟前
机器学习-贝叶斯公式
人工智能·机器学习·概率论
luoganttcc14 分钟前
详细分析一下 国富论里里面 十一章 关于白银价格的 论述
人工智能
哥布林学者22 分钟前
吴恩达深度学习课程四:计算机视觉 第二周:经典网络结构 课后习题和代码实践
深度学习·ai