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个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 6 下载量 142 浏览量
2022-12-12
18:37:29
上传
评论 4
收藏 2.63MB ZIP 举报
温馨提示
基于openCV的鱼群密度速度检测程序.zip python语言实现。 基于openCV的鱼群密度速度检测程序.zip python语言实现。 基于openCV的鱼群密度速度检测程序.zip python语言实现。 基于openCV的鱼群密度速度检测程序.zip python语言实现。基于openCV的鱼群密度速度检测程序.zip python语言实现。基于openCV的鱼群密度速度检测程序.zip python语言实现。 基于openCV的鱼群密度速度检测程序.zip python语言实现。 基于openCV的鱼群密度速度检测程序.zip python语言实现。 基于openCV的鱼群密度速度检测程序.zip python语言实现。基于openCV的鱼群密度速度检测程序.zip python语言实现。基于openCV的鱼群密度速度检测程序.zip python语言实现。 基于openCV的鱼群密度速度检测程序.zip python语言实现。 基于openCV的鱼群密度速度检测程序.zip python语言实现。 基于openCV的鱼群密度速度检测程序.zip python语言实现。基
资源推荐
资源详情
资源评论
收起资源包目录
基于openCV的鱼群密度速度检测程序.zip (11个子文件)
open-cv_fisho-master
opencv_fish
test.py 3KB
.idea
misc.xml 185B
opencv_fish.iml 284B
modules.xml 274B
.gitignore 176B
inspectionProfiles
profiles_settings.xml 174B
videos
4.mp4 1.82MB
ui.py 9KB
template
ocean.jpg 824KB
bg.jpeg 18KB
bg1.jpg 4KB
共 11 条
- 1
程序员张小妍
- 粉丝: 1w+
- 资源: 2645
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页