Skip to main content

moregeek program

使用python+opencv从摄像头逐帧读取图片保存在本地-多极客编程

今天测试的时候,遇到了一个问题,测试需求是,需要把摄像头拍摄的实时视频逐帧率保存下来。

经过查阅资料以及网友帮助,目前已经完成。记录下来希望可以帮助有需要的朋友。


1、思路


使用Python+Opencv,从摄像头的实时视频流中逐帧读取图片,保存到本地


2、工具



  1. 安装Python
  2. 安装Opencv

3、分类


目前测试的过程中遇到了三种类型的摄像头数据读取,分别是:



  1. USB普通摄像机:


直接使用Python+Opencv,进行数据采集



self.cap = cv2.VideoCapture(0);0是本地摄像头


  1. USB工业摄像头:


使用厂家自带的SDK进行二次开发,例如某厂家的SDK如下:
部分代码截图




  1. 网络摄像头:


从RTSP流中读取数据,读取方法,以大华普通网络摄像头为例:



在这里插入图片描述


4、示例


# -*- coding: cp936 -*-
"""
Author:xxxxxx
Date:2019-09-23
Discription:Read Camaro picture and save
"""

import cv2,os,time
import numpy as np
from multiprocessing import Process
import thread

class CamaroCap(object):

#打开摄像头
def __init__(self):
#self.cap = cv2.VideoCapture(0)
self.cap = cv2.VideoCapture("rtsp://admin:admin123@172.16.9.23/cam/realmonitor?channel=1&subtype=0")#获取网络摄像机
"""
self.cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480);
"""

#图片信息打印
def get_image_info(self,image):
print(type(image))
print(image.shape)
print(image.size)
print(image.dtype)
pixel_data = np.array(image)
print(pixel_data)

#逐帧读取数据并保存图片到本地制定位置
def Camaro_image(self):
i = 0
while(1):
"""
ret:True或者False,代表有没有读取到图片
frame:表示截取到一帧的图片
"""
ret,frame = self.cap.read()
ret,frame = self.cap.read()
#print("打印图片信息")
#self.get_image_info(frame)

# 展示图片
cv2.imshow('capture',frame)
#保存图片
cv2.imwrite(r"D:\image\\"+ str(i) + ".jpg",frame)
i = i + 1
if cv2.waitKey(1) & 0xFF == ord('q'):
break

if __name__ == '__main__':
outmasages = CamaroCap()
#调用摄像头
outmasages.Camaro_image()
#释放对象和销毁窗口
outmasages.cap.release()
cv2.destroyAllWindows()



©著作权归作者所有:来自51CTO博客作者虫无涯N的原创作品,请联系作者获取转载授权,否则将追究法律责任

场景编程集锦 - 你是谁?-多极客编程

1. 场景描述   或许是近年来电话推销机器人太泛滥了,常常搞得正常的电话销售“灰头土脸”。有人为了验证对方究竟是人还是机器,竟想出来各种各样的奇葩手段。最近一小伙接到了一个汽车推销电话,但他听声音无法判断对方是不是人工客服人员。尽管对方在电话里反复声称自己是“真人”,可男子还是不肯相信,竟然提出让客服人员即兴背诵唐诗《陋室铭》,以此证明自己不是人工智能机器人,令人啼笑皆非。其实在这个场景中涉及

[oeasy]python0041-多极客编程

转义序列回忆上次内容上次回顾了​​5bit-Baudot​​博多码的来历从 莫尔斯码 到 博多码 原来 人 来 收发电报现在 机器 来 收发电报输入方式 从 电键改成 键盘输出方式 从 纸带变成 打印纸张后来 电传打字机ASR-33成为 初代 经典终端除了 ​​\n​​ 和 ​​\r​​ 之外 还有什么 ​​特殊​​字符 吗?🤔搜索 ASCII找到 ​​ascii​​的定义还有 好多 类似于​​\

场景编程集锦 - 吉米的总统梦想-多极客编程

1. 场景描述   吉米是太平洋岛国一个贫苦家庭的孩子,他的梦想就是当总统,引领国家走向富强之路。   开学的第一堂课上,老师用白色的粉笔在黑板上写下了“我的梦想”,同学们都陷入了思考。大卫的梦想是当一名科学家,用奇思妙想改变世界,探索人类未知的秘密;杰克的梦想是当一名妙手回春的医生,用高超的医术解除病人的痛苦;迪娜的梦想是当一名歌手,让自己的歌声传遍世界的每一个角落;吉米的梦想是当总统,刚说到这

场景编程集锦 - 捏紧你的钱袋子-多极客编程

1. 场景描述 下面是一通电话的通话内容: 陌生人:“李总,最近还好吗?” 李总:“您是哪一位?” 陌生人:“我的声音听不出来啦?” 李总:“有点耳熟,想不起来。” 陌生人:“猜猜我是谁?” 李总:“想起来啦,你是猪二娃!” 陌生人:“对啊!” 李总:“猪二娃两年前就死啦!” 陌生人狠狠地挂断了电话。   哈哈哈,高手在民间!想必电话那头的陌生人肺都要气炸了。这是一个典型的电信诈骗套路,幽默睿智

场景编程集锦 - 你是谁?-多极客编程

1. 场景描述   或许是近年来电话推销机器人太泛滥了,常常搞得正常的电话销售“灰头土脸”。有人为了验证对方究竟是人还是机器,竟想出来各种各样的奇葩手段。最近一小伙接到了一个汽车推销电话,但他听声音无法判断对方是不是人工客服人员。尽管对方在电话里反复声称自己是“真人”,可男子还是不肯相信,竟然提出让客服人员即兴背诵唐诗《陋室铭》,以此证明自己不是人工智能机器人,令人啼笑皆非。其实在这个场景中涉及

python爬虫-第三章-4-利用beautifulsoup模块爬取某网壁纸图库图片-多极客编程

思路:1.提取子页面链接 2.访问子链接页面,提取下载地址 3.访问下载地址下载内容到本地# Demo Describe:数据解析 bs4import timeimport requestsimport randomimport stringfrom bs4 import BeautifulSoupfrom fake_useragent import UserAgentpicType = inpu

tcp三次握手四次挥手-多极客编程

三次握手 先ping域名为www.baidu.com,便于DNS解析。ping走的协议就包括DNS、ARP和ICMP。 接着使用Wireshark去抓包,抓包这里导航栏直接过滤ip就可以了,输入ip.host == 183.232.231.174 接着直接在浏览器输入百度域名www.baidu.com访问请求,Wireshark就能抓取包来分析了 这里我们可以看到,本地通过ipc

场景编程集锦 - 你是谁?-多极客编程

1. 场景描述   或许是近年来电话推销机器人太泛滥了,常常搞得正常的电话销售“灰头土脸”。有人为了验证对方究竟是人还是机器,竟想出来各种各样的奇葩手段。最近一小伙接到了一个汽车推销电话,但他听声音无法判断对方是不是人工客服人员。尽管对方在电话里反复声称自己是“真人”,可男子还是不肯相信,竟然提出让客服人员即兴背诵唐诗《陋室铭》,以此证明自己不是人工智能机器人,令人啼笑皆非。其实在这个场景中涉及

openapi 和 grpc 一起使用-多极客编程

花一些时间使用 OpenAPI 和 gRPC,您会发现这两种技术有很多共同点。两者都是开源成果,都描述了 API,并且都承诺为 API 生产者和消费者提供更好的体验。那么为什么我们需要两者呢?如果我们这样做,每个提供什么价值?每个项目可以从另一个项目中学到什么? 我们需要谈谈 API。 OpenAPI 和 gRPC 是构建网络 API的两种方法。引用Google API Design Guide

spring boot 3.0横空出世,快来看看是不是该升级了-多极客编程

简介 Spring boot 3.0于2022年11月正式发布了,这次的发布对于我们普通程序员的影响有多少呢?我们是不是需要考虑立马升级到Spring Boot3.0呢? 别急,看完这篇文章再来做决定也不迟。 对JAVA17和JAVA19的支持 相信很多小伙伴到现在还是使用得是JDK8,但是JDK8已经发布很多年了,随着oracle加速JDK版本的发布,现在每半年发布一次,目前最新的JDK版本已经

[c++实践]内存对齐与伪共享-多极客编程

内存对齐与伪共享时间测试类该类会在后续的测试中用于运行时间测试。// public/timer.h#include <chrono>#include <iostream>#include <functional>struct ScopeTimer{ ScopeTimer(const char *msg):_msg(msg),_now(std::chrono

flutter异常监控 - 肆 | rollbar源码赏析-多极客编程

一. Rollbar可以帮你解决哪些问题 无特别说明,文中Rollbar统指Rollbar-flutter 1. 代码复用 Rollbar官方文档说是纯Dart实现,该特征意味着自带”代码复用”光环。 如图当接入端(Third-APP)调用Rollbar SDK时表示包含的网络(异常数据上传等)和存储(异常存储管理)可达到复用效果。 若Flutter异常监控框架非纯Dart实现(第三篇中B