我是靠谱客的博主 清爽玫瑰,最近开发中收集的这篇文章主要介绍Python OpenCV:使用KNN背景分割器实现特征物体识别使用BackgroundSubtractor类中的KNN方法实现背景分割与特征物体检测,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
引用自OpenCV 3计算机视觉:Python语言实现 第二版
使用BackgroundSubtractor类中的KNN方法实现背景分割与特征物体检测
BackgroundSubtractor类的另一个基本特征是它可以计算阴影,对于精确度读取视频帧绝对是至关重要的;通过检测阴影,可排除检测图像的阴影区域(采用阈值方式),从而能关注实际特征。
本代码实现的功能是检测固定背景中,新出现的物体,可静可动。
测试环境为Python 3.7 + OpenCV
摄像头使用的是笔记本外接USB摄像头
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 OpenCV:使用KNN背景分割器实现特征物体识别使用BackgroundSubtractor类中的KNN方法实现背景分割与特征物体检测所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复