python实现物品识别_python+opencv实现动态物体识别
注意:这种⽅法⼗分受光线变化影响
⾃⼰在家拿着⼿机瞎晃的成果图:
源代码:
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 27 15:47:54 2017
@author: tina
"""
import cv2
import numpy as np
camera = cv2.VideoCapture(0) # 参数0表⽰第⼀个摄像头
# 判断视频是否打开
if (camera.isOpened()):
print('Open')
else:
print('摄像头未打开')
# 测试⽤,查看视频size
size = ((cv2.CAP_PROP_FRAME_WIDTH)),
(cv2.CAP_PROP_FRAME_HEIGHT)))
print('size:'+repr(size))
es = StructuringElement(cv2.MORPH_ELLIPSE, (9, 4))
kernel = np.ones((5, 5), np.uint8)
background = None
while True:
# 读取视频流
grabbed, frame_lwpCV = ad()
# 对帧进⾏预处理,先转灰度图,再进⾏⾼斯滤波。
# ⽤⾼斯滤波进⾏模糊处理,进⾏处理的原因:每个输⼊的视频都会因⾃然震动、光照变化或者摄像头本⾝等原因⽽产⽣噪声。对噪声进⾏平滑是为了避免在运动和跟踪时将其检测出来。
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, 148, 255, cv2.THRESH_BINARY)[1] # ⼆值化阈值处理
diff = cv2.dilate(diff, es, iterations=2) # 形态学膨胀rectangle函数opencv
# 显⽰矩形框
image, contours, hierarchy = cv2.py(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 该函数计算⼀幅图像中⽬标的轮廓
for c in contours:
urArea(c) < 1500: # 对于矩形区域,只显⽰⼤于给定阈值的轮廓,所以⼀些微⼩的变化不会显⽰。对于光照不变和噪声低的摄像头可不设定轮廓最⼩尺⼨的阈值
continue
(x, y, w, h) = cv2.boundingRect(c) # 该函数计算矩形的边界框
cv2.imshow('contours', frame_lwpCV)
cv2.imshow('dis', diff)
key = cv2.waitKey(1) & 0xFF
# 按'q'健退出循环
if key == ord('q'):
break
# When everything done, release the capture
cv2.destroyAllWindows()
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持脚本之家。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论