营销型网站建设技术指标,做网站模板的网页名称是m开头,网站收索流量,免费推广引流平台app文章目录一、项目思路二、算法详解2.1、计算两个数组或数组与标量之间的每个元素的绝对差。2.2、轮廓检测 绘制物体轮廓 绘制矩阵轮廓2.3、连续窗口显示2.4、读取视频#xff0c;显示视频#xff0c;保存视频三、项目实战#xff1a;实时动态目标检测实时动态目标检测一、…
文章目录一、项目思路二、算法详解2.1、计算两个数组或数组与标量之间的每个元素的绝对差。2.2、轮廓检测 绘制物体轮廓 绘制矩阵轮廓2.3、连续窗口显示2.4、读取视频显示视频保存视频三、项目实战实时动态目标检测实时动态目标检测一、项目思路
1、获取视频、读取帧图像 2、计算连续两张图像的像素绝对差获取动态目标 3、图像预处理灰度图、高斯模糊、二值化、膨胀 4、轮廓检测、绘制矩阵轮廓、绘制物体轮廓 5、分别实时显示矩阵轮廓、物体轮廓
python进阶——人工智能实时目标跟踪
二、算法详解
2.1、计算两个数组或数组与标量之间的每个元素的绝对差。
函数说明cv2.absdiff(src1, src2)
输入参数src1第一个输入数组或标量src2第二个输入数组或标量2.2、轮廓检测 绘制物体轮廓 绘制矩阵轮廓
######################################################################
# 1轮廓检测contours, hierarchy cv2.findContours(img, mode, method)
# 输入参数 mode: 轮廓检索模式
# 1RETR_EXTERNAL 只检索最外面的轮廓
# 2RETR_LIST 检索所有的轮廓但检测的轮廓不建立等级关系将其保存到一条链表当中
# 3RETR_CCOMP 检索所有的轮廓并建立两个等级的轮廓。顶层是各部分的外部边界内层是的边界信息;
# 4RETR_TREE 检索所有的轮廓并建立一个等级树结构的轮廓;最常用
# method: 轮廓逼近方法
# 1CHAIN_APPROX_NONE 存储所有的轮廓点相邻的两个点的像素位置差不超过1。 例如矩阵的四条边。最常用
# 2CHAIN_APPROX_SIMPLE: 压缩水平方向垂直方向对角线方向的元素只保留该方向的终点坐标。 例如矩形的4个轮廓点。
# 输出参数 contours所有的轮廓
# hierarchy每条轮廓对应的属性
# 备注0轮廓就是将连续的点连着边界连在一起的曲线具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。
# 备注1函数输入图像是二值图即黑白的不是灰度图。所以读取的图像要先转成灰度的再转成二值图。
# 备注2函数在opencv2只返回两个值contours, hierarchy。
# 备注3函数在opencv3会返回三个值img, countours, hierarchy
######################################################################
# 2绘制轮廓v2.drawContours(image, contours, contourIdx, color, thickness) ———— (在图像上)画出图像的轮廓
# 输入参数 image: 需要绘制轮廓的目标图像注意会改变原图
# contours: 轮廓点上述函数cv2.findContours()的第一个返回值
# contourIdx: 轮廓的索引表示绘制第几个轮廓。-1表示绘制所有的轮廓
# color: 绘制轮廓的颜色(RGB)
# thickness: 可选参数轮廓线的宽度-1表示填充
# 备注图像需要先复制一份copy(), 否则赋值操作的图像与原图会随之一起改变。
######################################################################
# 3绘制矩形边框:cv2.rectangle(img, (x, y), (xw, yh), color, thickness)
# (x, y) 矩形定点
# (xw, yh) 矩形的宽高
# color 矩形的边框颜色(0, 255, 0)
# thickness 矩形边框宽度
######################################################################2.3、连续窗口显示
# 显示图像cv2.imshow(window_title, img)
# 输入参数 window_title 自定义窗口的名字
# img 待显示图像
# 备注1窗口会自适应图像大小
# 备注2指定多个窗口名称可以显示多幅图像
# 备注3显示多幅图像的时候若cv2.imshow()指定相同的窗口名这样后面显示的图像会覆盖前面的图像从而只产生一个连续窗口。2.4、读取视频显示视频保存视频
OpenCV—读取视频显示视频保存视频 三、项目实战实时动态目标检测 import cv2# 1参数设置
Pixel_points 500 # 像素点数只检测大于该值的目标小于该值的目标自动忽略
video_path rC:\Users\my\Videos\car.mov # 视频存放地址路径中不能有中文将导致读取失败。if __name__ __main__:# 2读取视频cap cv2.VideoCapture(video_path) # 读取视频流_, frame1 cap.read() # 读取第一帧_, frame2 cap.read() # 读取第二帧while cap.isOpened(): # 检测视频是否可以打开# 3图像预处理diff cv2.absdiff(frame1, frame2) # 计算两张图像之间的每个像素的绝对差gray cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY) # 灰度图blur cv2.GaussianBlur(gray, (5, 5), 0) # 高斯滤波_, thresh cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY) # 二值化mask cv2.dilate(thresh, None, iterations3) # 膨胀操作contours, _ cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 轮廓检测# 4轮廓检测for contour in contours:(x, y, w, h) cv2.boundingRect(contour) # 获取矩阵轮廓的宽和高if cv2.contourArea(contour) Pixel_points: # 判断检测得到的矩形轮廓体积是否满足大小设置continuecv2.rectangle(frame1, pt1(int(x), int(y)), pt2(int(x) int(w), int(y) int(h)), color(0, 0, 255), thickness10) # 绘制矩形轮廓# cv2.drawContours(frame1, contours, -1, (0, 255, 0), 2) # 绘制物体轮廓# 5绘图cv2.imshow(frame, frame1) # 实时显示轮廓图Frame# cv2.imshow(mask, mask) # 实时显示掩膜图MASKframe1 frame2 # 保存当前帧循环-计算最近的两帧图像的像素差ret, frame2 cap.read() # 读取下一帧循环-计算最近的两帧图像的像素差# 6如果读到的帧数不为空则继续读取如果为空则退出。if frame2 is None:break# 7使用 waitKey 可以控制视频的播放速度。数值越小播放速度越快。if cv2.waitKey(50) ord( ): # ord( ): 按空格结束breakcap.release() # 释放摄像头cv2.destroyAllWindows() # 摧毁所有图窗