使用Python+Opencv从摄像头逐帧读取图片保存在本地

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

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

1、思路

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

2、工具

  1. 安装Python
  2. 安装Opencv

3、分类

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

  1. USB普通摄像机:

直接使用Python+Opencv,进行数据采集self.cap = cv2.VideoCapture(0);0是本地摄像头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()
    
本文转载于网络 如有侵权请联系删除

相关文章

  • Hadoop安装与环境配置入门

    写在前面本文所使用的系统为Centos8系统,略过了系统的安装部分,使用的Hadoop版本为Hadoopv2.10.0版本。配置JDK及其环境变量在安装JDK的过程中,使用的是软件包管理器直接安装的方式,当然你也可以采用编译的方式,这里就不再赘述。1.安装JDK1.8yuminstalljava-1.8.0-openjdk*-y复制使用查看版本的命令,查看是否安装成功[[email protected]hadoop]$java-version openjdkversion"1.8.0_252" OpenJDKRuntimeEnvironment(build1.8.0_252-b09) OpenJDK64-BitServerVM(build25.252-b09,mixedmode)复制如果你的输出结果与上面的类似,就说明你已经成功安装了JDK2.配置JAVA_HOME环境变量Hadoop的启动和一些其他的操作依赖于环境变量,所以你需要先配置JAVA_HOME变量。编辑/etc/profile文件,在最下面加入export JAVA_HOME=/usr/lib/jvm/

  • 理解RPC

    初体验简单理解解决分布式下,在不同服务器上的应用之间的远程调用,由于不在同一个JVM内存中。无法从A服务器调用B服务器中的方法,通过网络进行调用,调用过程称为RPC RPC解决什么问题访问量大的冲击,通过集群起不到什么缓解的作用,这个时候通过RPC,将我们的项目拆分成几个独立的业务模块。 将不同的业务模块放在不同服务器,运行在各自的JVM。 同服务器,同JVM不同业务,方法调方法(单体应用) 不同服务器,不同JVM,不同业务,方法不能调方法,RPC解决(分布式) RPC技术本质RPC是两系统之间相互调用的思想统称。 可以通过不同语言实现 以下技术都是通过RPC之间互相调用 Dubbo是基于Tcp协议 SpringCloud基于Http协议

  • Grafana和ES打造的Nginx的仪表盘

    Grafana和ES打造的Nginx的仪表盘grafana是一款采用go语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库,官网(http://docs.grafana.org/).我们想要打造一套监控平台,因此我在逐渐的完善我的DashBoard系列文章。如果你也对这部分感兴趣那么欢迎来和我一起构建这个仪表盘。监控指标针对入口Nginx,我设计了如下的监控指标:最近的24小时内访问量Top10的国家最近24小时最受欢迎的页面200状态码和404状态码的比例最受欢迎的世界题图展示等等构建你的DashBoard再开始构建前,我需要先介绍一下都用到了什么基础软件,Nginx,Redis,Logstash,Elasticsearch,Grafana,Pormetheus。那么,要构建这个DashBoard,我们首先要把Elasticsearch作为数据源配置到Grafana中。打开如下地址,然后输入Grafana的管理员用户名和密码进配置。http://grafana服务ip:3000复制进入配置页面,

  • Flink1.8源码编译安装

    总体来说,这里有两种安装模式: (一)直接从flink官网下载其提供好的针对特定版本的二进制包 优点:官网编译好的版本,下载即用 缺点:必须使用指定的版本 (二)从官网下载源码,进行编译安装 优点:可以任意指定编译的Hadoop版本等 缺点:编译耗时较长,且可能会导致失败 这里我们要介绍的是源码编译的方式,我们需要直接从github上下载最新的relese1.8版本源码或者通过gitclone命令来拉取,如下: gitclone-brelease-1.8.0https://github.com/apache/flink.git复制 下载之后,解压某个目录,进入目录执行命令: (1)mvncleaninstall-DskipTestsmvncleaninstall-DskipTests-Dhadoop.version=2.6.1(2)cdflink-dist(3)mvncleaninstall复制 jdk+scala+maven版本: scala版本: ☁~scala-versionScalacoderunnerversion2.12.8--Copyright2002-2018,LAMP

  • Python:logging 的巧妙设计

    引言logging的基本用法网上很多,这里就不介绍了。在引入正文之前,先来看一个需求:假设需要将某功能封装成类库供他人使用,如何处理类库中的日志? 数年前在一个C#开发的项目中,我用了这样的方法:定义一个logging基类,所有需要用到日志的类都继承这个基类,这个基类中定义一个LogHandler事件,该事件用于实现具体的记录日志动作,同时可以通过将类A的LogHandler委托挂到类B的LogHandler上,实现将两个类的日志信息添加到一起。自从看了python中logging的实现方式,我发现我的做法真是弱爆了。我在之前的博客Python:logging.NullHandler的使用中介绍了peewee框架中的日志输出,简单来说就是peewee中定义了一个名为peewee的Logger并添加了一个NullHandler,调用者只需要为其添加具体的Handler就可以输出日志了,非常方便。 假设我们在主程序中也有一个Logger,调用peewee后,我想将两个日志输出到同一个日志文件中去。显然将两个日志的FileHandler指向同一个日志文件是不可取的,存在并发抢占文件的风险。当

  • 多线程常见的面试题

    多线程常见的面试题如下:============================================================================= 1:多线程有几种实现方案,分别是哪几种? 两种。 继承Thread类 实现Runnable接口 扩展一种:实现Callable接口。这个需要和线程池结合。 ----------------------------------------------------------------------------- 2:同步有几种方式,分别是什么? 两种。 同步代码块 同步方法(静态同步方法) ----------------------------------------------------------------------------- 3:启动一个线程是run()还是start()?它们的区别? start(); run():封装了被线程执行的代码,直接调用仅仅是普通方法的调用。 start():启动线程,并由JVM自动调用run()方法。 ---------------------------

  • RTP 控制协议

    RTCP待续

  • 前端工程化1-模块

    写在前面 最近一两个月在思考未来自己的职业规划,团队内小伙伴陆陆续续走的走,来的来。大家都处于职业的焦虑之中,我一直都很想进一家大厂,目前仍然没有机会,也没有能力能够进去。毕业已经3年整了,不能继续说打好基础,把所有的业余精力都放在js基础学习上。应该着眼于自己的优势和有竞争力的方面努力,这样才不容易被取代。所以前端工程化是必不可少的深挖领域,以后博客都会产出工程化相关的文章。 前端工程化是一个很大的议题,基本上工程化体系是离不开webpack和js模块。首先先从模块说起,面试的时候免不了会被问到几个模块相关的问题。例如 说一说模块化的好处?前端模块化解决了哪些问题? 说一说esmodule和commonjsmodule的区别?commonjsrequire函数的工作原理? module.export、export与exportdefalut有什么区别? ... ... ... js模块介绍 模块化就是将一个大文件拆分成相互依赖的小文件,再通过打包工具进行统一的拼装和加载。有人会问了模块化的好处是什么,或者说为什么要做模块化?其实这样做的好处可以从两个角度分析 前端开发人员可以遵

  • vim的使用

    vim/etc/docker/daemon.json  

  • 转 ORA-00600 [4194] 处理

    https://blog.csdn.net/renyanjie123/article/details/111239302 ORA-00600[4194]处理   订阅专栏在某客户现场遇到一个看着很唬人的报错ORA600,遇到此报错很多人心里一慌,此次故障ORA-00600[4194]根本原因是数据库断电down机后undo损坏了,导致数据库不能open。接下来看alert报错 TueDec1510:45:272020Errorsinfiled:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_6032.trc(incident=166522):ORA-00603:ORACLEserversessionterminatedbyfatalerrorORA-00600:internalerrorcode,arguments:[4194],[],[],[],[],[],[],[],[],[],[],[]ORA-00600:internalerrorcode,arguments:[4194],[],[],[],[],[],[]

  • python 魔法方法,属性,迭代

    9.2构造方法 python中也属于自己的构造函数和析构函数, classfibs: def__init__(self): self.a=0 self.b=1 defnext(self): self.a,self.b=self.b,self.a+self.b returnself.a def__iter__(self): returnself fib=fibs() foriinfib: ifi>1000: printi break 复制 其中的__init__就是在类创建对象的时候自动调用的,而下面两个函数就是在迭代的时候自动调用的,这是python实现的语法。 类在继承时不显示调用父类的构造方法时,父类构造方法中声明的元素不会被继承 classBird: def__init__(self): self.hungry=True defeat(self): ifself.hungry: print'Ohhh.haha!' self.hungry=False else: print'I\'mfullThanks!' classSongBird(Bi

  • 团队-科学计算器-代码设计规范

    http://www.cnblogs.com/nothingserious/p/7608178.html

  • PowerDesigner逆向mysql数据库提示Could not Initialize JavaVM!

    PowerDesigner逆向mysql数据库报CouldnotInitializeJavaVM!提示,是因为powerdesigner基于32位JVM的原因。 解决办法: 安装32位的JDK 或者 安装mysql的ODBC驱动(重要提示:务必要选择32位的安装包),逆向操作时选择ODBC方式 例如: mysql-connector-odbc-8.0.17-win32.msi 下载地址: https://downloads.mysql.com/archives/c-odbc/

  • 【坐标离散化】

    坐标离散化(来自《挑战程序设计竞赛》P164)给出题目和主体代码: 题目:区域的个数w*h的格子上画了n条或垂直或水平的宽度为1的直线。求出这些线将格子划分了多少个区域(w和h的范围都为[1,1e6],n的范围为[1,500]) 思路:一般先想到的是类似水塘问题的处理,建立数组并深度优先搜索但是这个问题中w和h最大为1000000,所以没办法创建w*h的数组。因此我们要使用坐标离散化这一技巧 将前后没有变化的行列(意思是消除后不会影响区域个数的)相除后并不会影响区域的个数数组里只需要存储有直线的行列以及其前后的行列就足够了,这样的话大小最多3n*3n就足够了,因此就可以创建出数组并利用搜索求出区域的个数(争议:《挑战》原文是说6n*6n,可是我觉得似乎有些不对劲,我特意请教了师兄和队友以后,他们也觉得是3n*3n) 收获:1.坐标压缩 2.find函数可以在vector中找到某个元素的位置注意,find函数要求支持==,所以如果是自定义类型,需要先重载==blog:http://www.cnblogs.com/fnlingnzb-learner/p/5889026.html3.区域很大

  • 链表-头结点和头指针的区别

    head指针为单链表的头指针,单链表L:L既是单链表的名字,也是其头指针。链表中的最后一个结点的指针域定义为空指针(NULL)。单链表的定义:当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表。那么什么是头指针呢?我们把指向第一个结点的指针称为头指针,那么每次访问链表时都可以从这个头指针依次遍历链表中的每个元素,例如: structnodefirst; structnode*head=&first; 复制 这个head指针就是头指针。这个头指针的意义在于,在访问链表时,总要知道链表存储在什么位置(从何处开始访问),由于链表的特性(next指针),知道了头指针,那么整个链表的元素都能够被访问,也就是说头指针是必须存在的。 原文链接:https://blog.csdn.net/weixin_41413441/article/details/79063738 本文来自博客园,作者:江北一滴水,转载请注明原文链接:https://www.cnblogs.com/zhangzongjun/p/15520406.html

  • 京东app商品信息爬取

    抓取目标: 我们的抓取目标是京东商城的App电子商品信息,并将信息保存到MongoDB数据库中。 抓取商品信息的id号、标题、单价、评价条数等信息 准备工作和抓取分析 准备工作: 安装app抓包工具Charles、mitmproxy。 配置网络,确认手机和PC处于同一局域网下,并配置好代理服务 安装证书,确保可以抓取HTTPS的请求信息。 安装并开启MongoDB数据库。 抓取分析: 打开iCharles抓包工具,让后使用手机打开京东App应用程序,让后搜索电脑商品信息。 在抓包工具中获取url地址:http://api.m.jd.com/client.action?functionId=search 抓取信息格式为json格式。具体如下图所示 代码编写: importjson #importpymongo frommitmproxyimportctx #连接MongoDB数据库jddb,选择集合shop #client=pymongo.MongoClient('localhost') #db=client['jddb'] #collection=db['shop'] de

  • 前后端分离DRF项目初始化

    环境搭建 1创建虚拟环境 cd~/Desktopmkvirtualenvproject复制 如果自己的开发机子中存在多个版本的python,则可以指定解析器的版本 mkvirtualenvproject-ppython3复制 2相关命令复习 创建虚拟环境:       mkvirtualenv虚拟环境名称创建虚拟环境(指定python版本):mkvirtualenv-ppython3虚拟环境名称查看所有虚拟环境:      workon+2次tab键使用虚拟环境:       workon虚拟环境名称退出虚拟环境:       deactivate删除虚拟环境(必须先退出虚拟环境内部才能删除当前虚拟环境):         &nbs

  • 免费申请域名

    1.你要想免费申请.com的是不可能了不过别的还是可以的 地址: http://www.dot.tk/en/index.html?lang=en

  • Herbs Gathering HDU5887

    【原题地址】:HerbsGathering 【题目大意】: 有一个容量为\(m\)的背包,有\(n\)种草药,每种草药都有只有一株,每株草药都有价值\(v\)和体积\(w\),问能得到的草药价值最高为多少。 \(1\leqm\leq10^9,1\leqn\leq10^2\) 【题解】 考虑到\(n\)的数据范围较小所以我们使用搜索,对于每株草药我们枚举它选还是不选 最后统计最大价值 剪枝: 按照体积从大到小排序 ①维护体积和价值的前缀和,如果当前剩余未考虑草药能取完,那就直接取完并且\(return\) ②如果,当前已经得到的价值\(+\)剩余未考虑草药的价值和\(\leq\)当前答案,就\(return\) 体积从大到小排序,是为了更加高效地剪枝(不这样排序就会TLE) #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> usingnamespacestd; constintmaxn=110; intn,m; structbags { in

  • 适合女生学的技术有哪些?

    适合女生学的技术有哪些?适合女生学的技术有很多,但在这个互联网时代,年轻人需紧跟时代步伐,小朗认为女生学习Web前端开发或UI设计都是很不错的选择。   一、Web前端开发       如果对编程感兴趣的话可以学习Web前端开发,虽然在思维能力方面,女生可能要比男生要弱一些,但是女生的美感普遍比男生强,所以做开发的话前端比后端更适合女生。Web前端相比后端像Java语言这些,入门更简单,并且后端是与数据打交道,需要更强的思维逻辑能力。Web前端开发其实就是网站页面开发,页面的开发是需要美感的,虽然中大型公司一般都有UI设计师会给出设计方案,但是不免有的小公司会让你一个人把这些事情都干了。页面开发类似于拼接网页,把一个一个的元素(图片、文字、盒子等等)拼接成一个完整网页。如今前端工程师不仅仅是网站的开发,B/S(Browser/Service)架构的发展,小程序开发、APP开发等也是web前端工程师技能。   二、UI设计       如果你不喜欢编程、敲代码,喜欢画画等具有美感的事物,更建议可以去学习U

  • qq第三方登录

    JS_SDK方式简单到不行,几乎0操作。 相关链接:http://qzonestyle.gtimg.cn/qzone/openapi/js-sdk-demo.html 不过还是记录下。 @sectionCss{ @*<scripttype="text/javascript"src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js"data-appid="APPID"data-redirecturi="REDIRECTURI"charset="utf-8"></script>*@ <script> varappid=/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)?"1111111":"2222222"; </script> <scripttype="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loade

相关推荐

推荐阅读