我是靠谱客的博主 清爽玫瑰,这篇文章主要介绍Python OpenCV:使用KNN背景分割器实现特征物体识别使用BackgroundSubtractor类中的KNN方法实现背景分割与特征物体检测,现在分享给大家,希望可以做个参考。

引用自OpenCV 3计算机视觉:Python语言实现 第二版

使用BackgroundSubtractor类中的KNN方法实现背景分割与特征物体检测

BackgroundSubtractor类的另一个基本特征是它可以计算阴影,对于精确度读取视频帧绝对是至关重要的;通过检测阴影,可排除检测图像的阴影区域(采用阈值方式),从而能关注实际特征。

本代码实现的功能是检测固定背景中,新出现的物体,可静可动。
测试环境为Python 3.7 + OpenCV
摄像头使用的是笔记本外接USB摄像头

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import cv2 import numpy as np bs = cv2.createBackgroundSubtractorKNN(detectShadows = True) camera = cv2.VideoCapture(1) while True: ret, frame = camera.read() fgmask = bs.apply(frame) th = cv2.threshold(fgmask.copy(), 244, 255, cv2.THRESH_BINARY)[1] dilated = cv2.dilate(th, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3)), iterations = 2) contours, hier = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for c in contours: if cv2.contourArea(c) > 1600: (x,y,w,h) = cv2.boundingRect(c) cv2.rectangle(frame, (x,y), (x+w,y+h), (255,255,0), 2) cv2.imshow("mog",fgmask) cv2.imshow("thresh",th) cv2.imshow("detection",frame) if cv2.waitKey(30) & 0xff == 27: break camera.release() cv2.destroyAllWindows()

运行结果如下图所示:

此时没有物体进入或运动

此时有物体进入
在这里插入图片描述
测试发现检测效果良好,但是检测结果与摄像头的测光结果有很大关系。
如果新加入的物体使整体的测光结果有一定偏差的话,就会导致检测结果产生混乱。

最后

以上就是清爽玫瑰最近收集整理的关于Python OpenCV:使用KNN背景分割器实现特征物体识别使用BackgroundSubtractor类中的KNN方法实现背景分割与特征物体检测的全部内容,更多相关Python内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部