当前位置:网站首页>Opencv实现目标检测
Opencv实现目标检测
2022-06-28 04:57:00 【Keep_Trying_Go】
文章目录
1.前置知识点
(1)Opencv全局二值化和局部二值化
https://mydreamambitious.blog.csdn.net/article/details/125249121
(2)Opencv中的erode和dilate
https://mydreamambitious.blog.csdn.net/article/details/125265431
(3)Opencv中的findContours()和drawContours()
https://mydreamambitious.blog.csdn.net/article/details/125339604
(4)Opencv中绘制直线,矩形,圆,椭圆,多边形(包括多边形填充),绘制文本
https://mydreamambitious.blog.csdn.net/article/details/125392536
(5)Opencv中计算轮廓的周长和面积
https://mydreamambitious.blog.csdn.net/article/details/125340081
(6)Opencv中基础的知识点
https://mydreamambitious.blog.csdn.net/article/details/125351256
2.代码实战
(1)首先对读取的帧进行一定的缩放,提取感兴趣区域和二值化
frame=cv2.resize(src=frame,dsize=(750,500))
#提取感兴趣的区域
roi=frame[200:400,450:700]
mask=bgsegment.apply(roi)
#去掉视频mask中灰色的阴影
OK,mask=cv2.threshold(src=mask,thresh=245,maxval=255,type=cv2.THRESH_BINARY)
(2)查找轮廓和绘制矩形框
#查找轮廓
binary,contours,hierarchy=cv2.findContours(image=mask,mode=cv2.RETR_TREE,method=cv2.CHAIN_APPROX_SIMPLE)
#记录车子的位置
box=[]
#进行遍历筛选
for step,cont in enumerate(contours):
#计算面积
area=cv2.contourArea(cont)
if area>=150:
# cv2.drawContours(image=roi,contours=[cont],contourIdx=-1,
# color=(0,255,0),thickness=2)
#获取视频中物体的坐标和高宽
(x,y,w,h)=cv2.boundingRect(cont)
# #绘制矩阵(框柱物体)
cv2.rectangle(img=roi,pt1=(x,y),pt2=(x+w,y+h),color=(0,255,0),thickness=2)
(3)绘制视频读取的帧数
# 显示FPS
endtime = time.time()
FPS = 1 / (endtime - startime)
cv2.putText(img=frame, text='FPS: ' + str(int(FPS)), org=(30, 450),
fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=1.0,
color=(0, 255, 0), thickness=2)
(4)整体代码
import os
import cv2
import time
import numpy as np
# frame=np.zeros(shape=(450,450,3),dtype=np.uint8)
cap=cv2.VideoCapture('Video/DJ_1.mp4')
#去除背景
bgsegment=cv2.createBackgroundSubtractorMOG2(history=100,varThreshold=40)
#实例跟踪器
# trackers=cv2.MultiTracker_create()
# #使用的实例跟踪算法
# track_algorithm=cv2.TrackerKCF_create
#跟踪车子的一个全局ID
class_id=0
while cap.isOpened():
startime=time.time()
OK,frame=cap.read()
if OK==False:
break
frame=cv2.resize(src=frame,dsize=(750,500))
#提取感兴趣的区域
roi=frame[200:400,450:700]
mask=bgsegment.apply(roi)
#去掉视频mask中灰色的阴影
OK,mask=cv2.threshold(src=mask,thresh=245,maxval=255,type=cv2.THRESH_BINARY)
#进行开运算,将mask中的小物体都去掉
# kernel=cv2.getStructuringElement(shape=cv2.MORPH_RECT,ksize=(3,3))
# mask=cv2.morphologyEx(src=mask,op=cv2.MORPH_OPEN,kernel=kernel,iterations=1)
#查找轮廓
binary,contours,hierarchy=cv2.findContours(image=mask,mode=cv2.RETR_TREE,method=cv2.CHAIN_APPROX_SIMPLE)
#记录车子的位置
box=[]
#进行遍历筛选
for step,cont in enumerate(contours):
#计算面积
area=cv2.contourArea(cont)
if area>=150:
# cv2.drawContours(image=roi,contours=[cont],contourIdx=-1,
# color=(0,255,0),thickness=2)
#获取视频中物体的坐标和高宽
(x,y,w,h)=cv2.boundingRect(cont)
# #绘制矩阵(框柱物体)
cv2.rectangle(img=roi,pt1=(x,y),pt2=(x+w,y+h),color=(0,255,0),thickness=2)
# 显示FPS
endtime = time.time()
FPS = 1 / (endtime - startime)
cv2.putText(img=frame, text='FPS: ' + str(int(FPS)), org=(30, 450),
fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=1.0,
color=(0, 255, 0), thickness=2)
cv2.imshow('image', frame)
cv2.imshow('roi', roi)
cv2.imshow('mask', mask)
key=cv2.waitKey(30)
if key==27:
break
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
print('Pycharm')
注明:读者在提取感兴趣的区域时,可以根据自己的视频来,因为我是根据自己的视频中的车子移动的位置来提取的。
边栏推荐
- OracleData安装问题
- 通过例子学习Rust
- BioVendor sRAGE抗体解决方案
- metaRTC5.0编程之p2p网络穿透(stun)指南
- [noip2002 popularization group] cross the river pawn
- DH parameters of robotics and derivation using MATLAB symbolic operation
- 整理网上蛋糕商城项目
- Google Earth engine (GEE) - global flood database V1 (2000-2018)
- 机器人学DH参数及利用matlab符号运算推导
- 汇编常用指令
猜你喜欢

别卷!如何高质量地复现一篇论文?

恭喜我自己,公众号粉丝破万

改性三磷酸盐研究:Lumiprobe氨基-11-ddUTP

学习太极创客 — MQTT 第二章(四)ESP8266 保留消息应用
![[applet] solution document using font awesome Font Icon (picture and text)](/img/1b/d1b738e6e35e59cc4a417df4ea0e8d.png)
[applet] solution document using font awesome Font Icon (picture and text)

并发之wait/notify说明

CI & CD must be known!

OracleData安装问题

Taco: a data enhancement technique for character recognition
![[early knowledge of activities] list of recent activities of livevideostack](/img/aa/8b14f9863cd675a7be06a0c3855a93.png)
[early knowledge of activities] list of recent activities of livevideostack
随机推荐
Blocking, non blocking, IO multiplexing select\poll\epoll
Analysis of distributed transaction solution Seata golang
The short video local life section has become popular. How to grasp the new opportunities?
高通平台 Camera 之 MCLK 配置
PCR/qPCR研究:Lumiprobe丨dsGreen 用于实时 PCR
OracleData安装问题
openssl客户端编程:一个不起眼的函数导致的SSL会话失败问题
One article explains in detail | those things about growth
汇编常用指令
项目经理考完PMP就够了?不是的!
CPG 固体支持物研究:Lumiprobe通用 CPG II 型
Code understanding: implementing volume models for hangwriten text recognition
Taco: a data enhancement technique for character recognition
[CSP-J2020] 优秀的拆分
Learning Tai Chi Maker - mqtt Chapter 2 (V) heartbeat mechanism
2022年安全员-A证考试题库及模拟考试
metaRTC5.0编程之p2p网络穿透(stun)指南
2022年安全员-B证考试题库及答案
[csp-j2020] excellent splitting
Analysis of distributed transaction TCC