关于python:使用PythonOpencv从摄像头逐帧读取图片保存在本地

32次阅读

共计 1437 个字符,预计需要花费 4 分钟才能阅读完成。

明天测试的时候,遇到了一个问题,测试需要是,须要把摄像头拍摄的实时视频逐帧率保留下来。
通过查阅材料以及网友帮忙,目前曾经实现。记录下来心愿能够帮忙有须要的敌人。

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()
    

正文完
 0