共计 3292 个字符,预计需要花费 9 分钟才能阅读完成。
图片车辆辨认
依据文章搭建好环境后开始进行做我的项目 link
import sys
import cv2
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon, QPalette, QPixmap, QBrush, QRegExpValidator
class mainWin(QWidget):
def __init__(self):
"""构造函数"""
super().__init__()
self.initUI()
self.openBtn.clicked.connect(self.openFile) # 信号和槽
self.grayBtn.clicked.connect(self.imgGray) # 信号和槽
self.carCheckBtn.clicked.connect(self.carCheck)
def initUI(self):
# 设置窗口得大小
self.setFixedSize(860, 600)
# 图标和背景
self.setWindowTitle("车辆检测")
self.setWindowIcon(QIcon("img/icon.jpg")) # 图标
# 标签
self.leftLab = QLabel("原图:", self)
self.leftLab.setGeometry(10, 50, 400, 400) # 设置相对地位
self.leftLab.setStyleSheet("background:white")
self.newLab = QLabel("新图:", self)
self.newLab.setGeometry(420, 50, 400, 400) # 设置相对地位
self.newLab.setStyleSheet("background-color:white")
# 按钮
self.openBtn = QPushButton("关上文件", self)
self.openBtn.setGeometry(10, 10, 80, 30)
self.grayBtn = QPushButton("灰度解决", self)
self.grayBtn.setGeometry(100, 10, 80, 30)
self.carCheckBtn = QPushButton("视频检测", self)
self.carCheckBtn.setGeometry(200, 10, 80, 30)
关上文件办法
def openFile(self):
"""
关上文件的处理函数
:return;
:return:
"""print(" 关上图片 ")
self.img,imgType = QFileDialog.getOpenFileName(self, "关上图片", "","*.jpg;;*.png;;ALL FILES(*)")
print(self.img)
#jpg = QPixmap(self.img)
self.leftLab.setPixmap(QPixmap(self.img))
self.leftLab.setScaledContents(True)
图像变灰度并车辆识别方法
外汇专业术语 https://www.fx61.com/definitions
def imgGray(self):
print("灰度")
img1 = cv2.imread(self.img)
#1. 灰度化解决
img_gray = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
# BGR = cv2.cvtColor(module,cv2.COLOR_BGR2RGB)# 转化为 RGB 格局
# ret,thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)# 二值化
#2. 加载级联分类器
car_detector = cv2.CascadeClassifier("./cars.xml")
"""
image-- 图片像素数据
scaleFactor=None, 缩放比例
minNeighbors=None,2 写 2 就是 3
flags =None, 标记位 用什么来进行检测
minSize=None, 最小的尺寸
maxSize=None, 最大的尺寸
self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None
"""
#3. 检测车辆 多尺度检测,失去车辆的坐标定位
cars = car_detector.detectMultiScale(img_gray, 1.05, 2, cv2.CASCADE_SCALE_IMAGE, (20,20), (100,100))
print(cars)
#(274 46 28 28) --(x,y,w,h)
#4. 在车的定位上画图
for(x, y, w, h) in cars:
print(x, y, w, h)
#img, pt1, pt2, color, thickness = None, lineType = None, shift = None
cv2.rectangle(img1,(x,y), (x+w, y+h), (255, 255, 255), 1, cv2.LINE_AA)
# 保留图片
img_gray_name = "3.png" # 文件名
cv2.imwrite(img_gray_name, img1) # 保留
# 显示再控件下面
self.newLab.setPixmap(QPixmap(img_gray_name))
self.newLab.setScaledContents(True)
视频车辆辨认
视频关上且识别方法
def carCheck(self):
print("车流检测")
# parent: QWidget = None, caption: str = '', directory: str ='', filter:
#1. 抉择视频
video, videoType = QFileDialog.getOpenFileName(self, "关上视频", "","*.mp4")
print(video, videoType)
# video -- 关上的视频 filename
#2. 读取加载视频
cap = cv2.VideoCapture(video)
#3. 读取一帧图片
while True:
status,img = cap.read()
if status:
# 灰度
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# 2. 加载级联分类器
car_detector = cv2.CascadeClassifier("./cars.xml")
cars = car_detector.detectMultiScale(gray, 1.2, 2, cv2.CASCADE_SCALE_IMAGE, (25, 25), (200, 200))
# 画框框
for (x, y, w, h) in cars:
print(x, y, w, h)
# img, pt1, pt2, color, thickness = None, lineType = None, shift = None
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 255), 1, cv2.LINE_AA)
print("实时车流量", len(cars))
text = 'car number:'+str(len(cars))
# 增加文字
cv2.putText(img, text, (350, 100), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (255, 255, 0), 2)
cv2.imshow("opencv", img)
key = cv2.waitKey(10) # 延时并且监听按键
if key == 27:
break
else:
break
# 开释资源
cap.release()
cv2.destroyAllWindows()
主函数
if __name__ == "__main__":
app = QApplication(sys.argv) #创立一个应用程序
win = mainWin() #实例化对象
win.show() #显示窗口
sys.exit(app.exec_())
正文完