import cv2
import numpy as np
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import QtCore, QtGui, QtWidgets
import os
import sys
from pathlib import Path
import time
# coding=utf-8
# author Vicky-zhang
# date 18/11/2022
# describe 鱼群密度检测。
def det_yolov5v6(info1):
camera = cv2.VideoCapture(info1) # 参数0表示第一个摄像头
# 判断视频是否打开
if (camera.isOpened()):
print('Open')
else:
print('摄像头未打开')
# 测试用,查看视频size
size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('size:' + repr(size))
es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 4))
kernel = np.ones((5, 5), np.uint8)
background = None
fps = camera.get(cv2.CAP_PROP_FPS) # 视频平均帧率
while True:
# 读取视频流
grabbed, frame_lwpCV = camera.read()
if frame_lwpCV is None:
break
# 对帧进行预处理,先转灰度图,再进行高斯滤波。
# 用高斯滤波进行模糊处理,进行处理的原因:每个输入的视频都会因自然震动、光照变化或者摄像头本身等原因而产生噪声。对噪声进行平滑是为了避免在运动和跟踪时将其检测出来。
gray_lwpCV = cv2.cvtColor(frame_lwpCV, cv2.COLOR_BGR2GRAY)
gray_lwpCV = cv2.GaussianBlur(gray_lwpCV, (21, 21), 0)
# 将第一帧设置为整个输入的背景
if background is None:
background = gray_lwpCV
continue
# 对于每个从背景之后读取的帧都会计算其与北京之间的差异,并得到一个差分图(different map)。
# 还需要应用阈值来得到一幅黑白图像,并通过下面代码来膨胀(dilate)图像,从而对孔(hole)和缺陷(imperfection)进行归一化处理
diff = cv2.absdiff(background, gray_lwpCV)
diff = cv2.threshold(diff, 35, 255, cv2.THRESH_BINARY)[1] # 二值化阈值处理
diff = cv2.dilate(diff, es, iterations=2) # 形态学膨胀
# 显示矩形框
contours, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE) # 该函数计算一幅图像中目标的轮廓
fishcount = 0
for c in contours:
if cv2.contourArea(c) < 1000 or cv2.contourArea(c) > 3000: # 对于矩形区域,只显示大于给定阈值的轮廓,所以一些微小的变化不会显示。对于光照不变和噪声低的摄像头可不设定轮廓最小尺寸的阈值
continue
print(cv2.contourArea(c))
fishcount += 1
(x, y, w, h) = cv2.boundingRect(c) # 该函数计算矩形的边界框
# cv2.rectangle(frame_lwpCV, (x, y), (x+w, y+h), (0, 255, 0), 2)
tl = round(0.002 * (frame_lwpCV.shape[0] + frame_lwpCV.shape[1]) / 2) + 1 # line/font thickness
color = [0, 255, 0]
c1, c2 = (int(x), int(y)), (int(x + w), int(y + h))
cv2.rectangle(frame_lwpCV, c1, c2, [0, 255, 0], thickness=tl, lineType=cv2.LINE_AA)
# cv2.imshow('4', frame_lwpCV)
# cv2.waitKey(0)
label = str(cv2.contourArea(c) * 12 * 27 / (40000 * 500))[:4] + 'm/s'
tf = max(tl - 1, 1) # font thickness
t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0]
c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3
cv2.rectangle(frame_lwpCV, c1, c2, color, -1, cv2.LINE_AA) # filled
cv2.putText(frame_lwpCV, label, (c1[0], c1[1] - 2), 0, 1, [0, 0, 255], thickness=tf, lineType=cv2.LINE_AA)
#cv2.imshow('5', frame_lwpCV)
#cv2.waitKey(0)
label2 = 'fish numbers=' + str(fishcount)
cv2.putText(frame_lwpCV, label2, (20, 20), 1, 2, [255, 215, 0], thickness=2, lineType=cv2.LINE_AA)
ui.showimg(frame_lwpCV)
QApplication.processEvents()
time.sleep(1 / fps) # 按原帧率播放
# When everything done, release the capture
camera.release()
class Thread_1(QThread): # 线程1
def __init__(self,info1):
super().__init__()
self.info1=info1
self.run2(self.info1)
def run2(self, info1):
result = []
result = det_yolov5v6(info1)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1280, 960)
MainWindow.setStyleSheet("background-image: url(\"./template/bg1.jpg\")")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(168, 60, 551, 71))
self.label.setAutoFillBackground(False)
self.label.setStyleSheet("")
self.label.setFrameShadow(QtWidgets.QFrame.Plain)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.label.setStyleSheet("font-size:42px;font-weight:bold;font-family:SimHei;background:rgba(255,255,255,0);")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(40, 188, 751, 501))
self.label_2.setStyleSheet("background:rgba(255,255,255,1);")
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(40, 746, 951, 180))
self.textBrowser.setStyleSheet("background:rgba(0,0,0,0);")
self.textBrowser.setObjectName("textBrowser")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(1020, 750, 150, 40))
self.pushButton.setStyleSheet("background:rgba(53,142,255,1);border-radius:10px;padding:2px 4px;")
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(1020, 810, 150, 40))
self.pushButton_2.setStyleSheet("background:rgba(53,142,255,1);border-radius:10px;padding:2px 4px;")
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(1020, 870, 150, 40))
self.pushButton_3.setStyleSheet("background:rgba(53,142,255,1);border-radius:10px;padding:2px 4px;")
self.pushButton_3.setObjectName("pushButton_2")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "鱼群密度速度检测"))
self.label.setText(_translate("MainWindow", "鱼群密度速度检测"))
self.label_2.setText(_translate("MainWindow", "路径请勿包含中文"))
self.pushButton.setText(_translate("MainWindow", "选择文件"))
self.pushButton_2.setText(_translate("MainWindow", "开始识别"))
self.pushButton_3.setText(_translate("MainWindow", "退出"))
# 点击文本框绑定槽事件
self.pushButton.clicked.connect(self.openfile)
self.pushButton_2.clicked.connect(self.click_1)
self.pushButton_3.clicked.connect(self.handleCalc3)
def openfile(self):
global sname, filepath
fname = QFileDialog()
fname.setAcceptMode(QFileDialog.AcceptOpen)
fname, _ = fname.getOpenFileName()
if fname == '':
return
filepath = os.path.normpath(fname)
sname = filepath.split(os.sep)
ui.prin
没有合适的资源?快使用搜索试试~ 我知道了~
基于openCV的检测系统源码.zip
共11个文件
xml:3个
jpg:2个
py:2个
4 下载量 75 浏览量
2023-09-30
17:13:04
上传
评论 1
收藏 2.64MB ZIP 举报
温馨提示
基于openCV的检测系统源码.zip 基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip基于openCV的检测系统源码.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于openCV的检测.zip (11个子文件)
open-cv_主master
opencv_fish
template
bg.jpeg 18KB
bg1.jpg 4KB
ocean.jpg 824KB
.idea
misc.xml 185B
inspectionProfiles
profiles_settings.xml 174B
modules.xml 274B
.gitignore 176B
opencv_fish.iml 284B
videos
4.mp4 1.82MB
ui.py 9KB
test.py 3KB
共 11 条
- 1
资源评论
程序员张小妍
- 粉丝: 1w+
- 资源: 2599
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功