摄像头的调用和视频识别

这篇具有很好参考价值的文章主要介绍了摄像头的调用和视频识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摄像头调用

创建视频捕捉对象:cv2.VideoCapture()
参数为视频设备的索引号,就一个摄像投的话写0默认;
或者是指定要读取视频的路径。

+实时播放

import cv2
import numpy as np

cap = cv2.VideoCapture(0) 
# 创建循环结构连续按帧读取视频
while (True):
	# ret返回布尔值,frame三维矩阵(每一帧的图像)
	ret, frame = cap.read()
	# 并展示
	cv2.imread('frame', frame)
	# 按下‘q’键退出循环
	if cv2.waitKey(1) && 0xFF ==ord('q'):
		break
cap.release() # 释放资源
cv2.destroyAllWindows()

+保存视频

cv2.VideoWriter()

import cv2

cap = cv2.VideoCapture(0)

#创建编码方式
# mp4:'X','V','I','D'
# avi:'M','J','P','G'或'P','I','M','1' 
# flv:'F','L','V','1'
fourcc = cv2.VideoWriter_fourcc('X','V','I','D')

# 创建VideoWriter对象
out = cv2.VideoWriter('ouput_1.mp4', fourcc, 20.0, (640, 480)) # 播放帧率,大小
# 创建循环结构进行连续读写
while(cap.isOpened()):
	ret, frame = cap.read()
	if ret == True:
		out.write(frame)
		cv2.imshow('frame', frame)
		if cv2.waitKey(1) && 0xFF == ord('q'):
			break
		else:
			break
cap.release()
out.release()
cv2.destryAllWindows()

运动目标识别

帧差法

通过对视频中相邻两帧图像做差分运算来标记运动物体,
移动的物体在相邻帧中灰度会有差别,因此差值为0的是静态物体。

import cv2
camera = cv2.VideoCapture("move_detect.flv")

out_fps = 12.0 # 输出文件的帧率
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', '2') # 创建编码方式
# 创建VideoWriter对象
out1 = cv2.VideoWriter('v1.avi', fourcc, out_fps, (500, 400))
out2 = cv2.VideoWriter('v2.avi', fourcc, out_fps, (500, 400))

# 初始化
lastFrame = None

# 创建循环结构进行连续读写
while camera.isOpened():
	ret, frame = camera.read()
	# 如果不能抓取到一帧,说明到了视频的结尾
	if not ret:
		break
	# 调整该帧大小
	frame = cv2.resize(frame, (500, 400), interpolation = cv2.INTER_CUBIC)
	# 如果第一帧是None,对其初始化
	if lastFrame == None:
		lastFrame = frame
		continue
	# 求帧差
	frameDelta = cv2.absdiff(lastFrame, frame)
	lastFrame = frame
    '''
	阈值化,留下轮廓
	'''
	thresh = cv2.cvtColor(frameDelta, cv2.COLOR_BGR2GRAY) # 灰度图
	thresh = cv2.threshold(thresh, 25, 255, cv2.THRESH_BINARY)[1] # 二值化
	# 阈值图像上的轮廓位置
	cnts, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
	# 遍历轮廓
	for c in cnts:
		# 忽略小轮廓,可能运动的小鸟之类的,排除误差
		if cv2.contourArea(c) < 300:
			continue
		# 画轮廓边界框
		(x, y, w, h) = cv2.boundingRect(c)
		cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
	# 展示当前帧
	cv2.imshow("frame", frame)
	cv2.imshow("frameDelta", frameDelta)
	cv2.imshow("thresh", thresh)
	# 保存视频
	out1.write(frame)
	out2.write(frameDelta)

	if cv2.waitKey(20) && 0xFF == ord('q'):
		break
# 资源释放
out1.release() 
out2.release() 
camera.release() 
cv2.destroyAllWindows()

摄像头的调用和视频识别,计算机视觉基础,opencv,计算机视觉,视频
飘动的彩带也被捕捉到了,但是去误差,没有标小轮廓;
行人前后帧(运动)幅度小的也没被发现(框定)。

背景减除法

对视频的背景进行建模,实现背景消除,生成mask图像,通过对mask二值图像分析实现对前景活动对象的区域的提取。

  1. 初始化背景建模对象GMM
  2. 读取视频一帧
  3. 使用背景建模消除生成mask
  4. 对mask进行轮廓分析图区ROI(region of interest)
  5. 绘制ROI对象
import numpy as np
import cv2

# read the video
camera = cv2.VideoCapture('move_detect.flv')
# 创建背景减除对象
fgbg = cv2.createBackgroundSubstractorMOG2(
	history = 500, varThreshold = 100, detectShadows = False)

def getPerson(image, opt=1):
	# 获取前景mask
	mask = fgbg.apply(frame)
	'''
	去噪
	'''
	# 创建一个矩形形状的结构元素,用于形态学操作,如腐蚀(erosion)和膨胀(dilation)
	line = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 5), (-1, -1))
	mask = cv2.morphologyEx(mask, cv2.MORPG_OPEN, line)
	cv2.imshow('mask', mask) 
	
	# 画出轮廓并忽略小于阈值的轮廓
	contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
	for c in contours:
		area = cv2.contourArea(c)
		if area < 150:
			continue
		rect = cv2.minAreaRect(c) # 返回一个具有最小面积的矩形
		cv2.ellipse(image, rect, (0, 0, 255), 2, 8)
		cv2.circle(image, (np.int32(rect[0][0]), np.int32(rect[0][1])), 2, (0, 0, 255), 2, 8, 0) # 取矩形中心点作为圆心
	return image, mask

while True:
	ret, frame = camera.read()
	res, m_ = getPerson(frame) # Python中使用下划线作为占位符变量名是一种惯例。它也可以用来忽略函数的返回值或迭代中的某些值,以避免产生未使用变量的警告
	cv2.imshow('res', res)
	if cv2.waitKey(20) && 0xFF == ord('q'):
		break
# 资源释放
camera.release() 
cv2.destroyAllWindows()

图像论1帧,连续帧就成了视频文章来源地址https://www.toymoban.com/news/detail-679610.html

到了这里,关于摄像头的调用和视频识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用OpenCV调用摄像头和读取视频图片

    要捕获视频,你需要创建一个 VideoCapture 对象。它的参数是设备索引的名称。设备索引就是指定哪个摄像头的数字。正常情况下,内部摄像头可以通过传入0来调用,传递1来选择外置的第二个相机,以此类推。在此之后,你可以逐帧捕获。但是在最后,不要忘记释放俘虏。 直

    2024年02月08日
    浏览(51)
  • yolo v5代码运行图片、调用摄像头、视频

    一、运行 1.视频 修改detect文件219行。 default=ROOT / \\\'data/images/3.mp4\\\' 2.调用摄像头 修改detect文件219行 3.图片 修改detect文件219行。 default=ROOT / \\\'data/images/3.jpg\\\' 二、库 Package Version absl-py 1.3.0 alabaster 0.7.12 applaunchservices 0.2.1 appnope 0.1.2 arrow 1.2.3 astroid 2.11.7 atomicwrites 1.4.0 attrs 22.1.0 autope

    2023年04月17日
    浏览(48)
  • JS PC端调用摄像头录视频截图上传文件

    创建 Catcher 类 直接在HTML文件中调用

    2024年02月10日
    浏览(51)
  • openCV 多线程调用多个海康威视摄像头(避免画面不同步),进行人脸识别

    1、创建多个线程来拉取不同的视频流,不使用多线程的话,所有的视频流就在排一个队,会出现画面不同步的情况 代码: 2、使用numpy将多个画面放在同一个frame中,图像就是矩阵,numpy是用来处理矩阵的类 代码:  进行人脸识别,网不好帧率太低

    2024年04月25日
    浏览(101)
  • 【计算机视觉】基于OpenCV计算机视觉的摄像头测距技术设计与实现

    在当今技术日益进步的时代,计算机视觉已成为我们生活中不可或缺的一部分。从智能监控到虚拟现实,计算机视觉技术的应用范围日益广泛。在这篇博客中,我们将探索一个特别实用的计算机视觉案例:使用OpenCV实现摄像头测距。这一技术不仅对专业人士有用,也为编程爱

    2024年02月04日
    浏览(45)
  • 用于计算机屏幕安全摄像头系统:Screen Anytime Crack

    Screen Anytime 是一款软件,旨在自动将整个用户会话或 PC/服务器/VM/Kiosk 的 /RDP/Citrix/RemoteApp 会话的屏幕活动记录到视频日志文件中,以用于记录、审核和监控目的。通过重播其高度压缩的视频,您可以轻松回顾单台计算机或一组服务器/PC 的任何过去时刻。还包括集中管理和实

    2024年01月23日
    浏览(60)
  • 树莓派CSI摄像头使用python调用opencv库函数进行运动检测识别

    目录 一、完成摄像头的调用 二、利用python调用opencv库函数对图像进行处理 2.1 图像处理大体流程 2.2 opencv调用函数的参数以及含义 2.2.1 ret, img = cap.read() 读取帧图像 2.2.2 cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 灰度图像 2.2.3 gray_diff_img = cv2.absdiff(gray_img, previous_img) 帧差法 2.2.4 cv2.thre

    2024年02月15日
    浏览(50)
  • MediaPipe上手案例,手部骨架识别,用视频替换代码摄像头采集

    在做 MediaPipe 项目的时候,经常需要唤醒摄像头进行视频采集,学习的时候可以使用视频替换摄像头采集动作,这就是本篇博客的的由来。 为了便于学习,我们先直接展示入门案例,然后查看从代码角度进行讲解。 为了让代码跑起来,需要提前安装 opencv-python 库和 mediapipe 库

    2023年04月17日
    浏览(44)
  • 树莓派利用python-opencv使用CSI摄像头调用监控视频

    目录 一、安装python-opencv。 二、使用工具Xshell7和MobaXterm 三、连接并打开CSI摄像头 3.1连线如图所示: 3.2打开摄像头 四、编写摄像头代码调用摄像头         一定要选择配置好的安装python-opencv,不要去配置安装,然后还cmake编译,没有必要基本上安装过程都会报2-3个错误,还

    2023年04月17日
    浏览(52)
  • 使用ffmpeg调用电脑自带的摄像头和扬声器录制音视频

    1、打开cmd,执行 chcp 65001 ,修改cmd的编码格式为utf8,避免乱码 2、执行指令 ffmpeg -list_devices true -f dshow -i dummy ,查看当前window的音频和视频名称 3、打开windows系统的\\\"打开声音设置\\\"–“麦克风隐私设置”–\\\"允许应用访问你的麦克风\\\"点击开启 录制视频: 录制音频: 录制音视频:

    2024年02月04日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包