ubuntu16.04+python2+opencv

(一) 开发前的准备工作

sudo apt-get install python-pip

pip install numpy

pip install opencv-python

(二)开启摄像头,获取帧图片

#!usr/bin/python

# coding=utf-8

import cv2

import numpy

# 从摄像头采集图像

# 参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频

cap = cv2.VideoCapture(0)

while True:

# get a frame

# capture.read() 按帧读取视频

# ret,frame 是capture.read()方法的返回值

# 其中ret是布尔值,如果读取帧正确,返回True;如果文件读到末尾,返回False。

# frame 就是每一帧图像,是个三维矩阵

ret, frame = cap.read()

# show a frame

cv2.imshow("capture", frame)

# waitKey() 表示等待键盘输入

# 参数 1 ,表示延时1ms切换到下一帧图像,对视频而言

# 参数 0 ,表示只显示当前帧图像,相当于视频暂停

# 参数过大,会因延时过就而卡顿

# asc = cv2.waitKey(1)

# asc 键盘输入的ASCII码,esc键对应的ASCII码是27

# 它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值

asc = cv2.waitKey(1)

# print asc

if asc == ord('q'):

break

# 释放摄像头

cap.release()

# 关闭所有图像窗口

cv2.destroyAllWindows()

(三)视频传输

我是以传输图片的原理达到传输视频目的,也就是传输一张一张的图片。

分为客户端和服务端,既可以客户端采集视频传输到服务端显示,也可以服务端采集视频传输到客户端显示,这里只是初步应用。

服务端

1 #!/usr/bin/python

2 # -*-coding:utf-8 -*-

3 import socket

4 import cv2

5 import numpy

6

7

8 # 接受图片大小的信息

9 def recv_size(sock, count):

10 buf = ''

11 while count:

12 newbuf = sock.recv(count)

13 if not newbuf: return None

14 buf += newbuf

15 count -= len(newbuf)

16 return buf

17

18

19 # 接收图片

20 def recv_all(sock, count):

21 buf = ''

22 while count:

23 # 这里每次只接收一个字节的原因是增强python与C++的兼容性

24 # python可以发送任意的字符串,包括乱码,但C++发送的字符中不能包含'\0',也就是字符串结束标志位

25 newbuf = sock.recv(1)

26 if not newbuf: return None

27 buf += newbuf

28 count -= len(newbuf)

29 return buf

30

31 # socket.AF_INET 用于服务器与服务器之间的网络通信

32 # socket.SOCK_STREAM 代表基于TCP的流式socket通信

33

34 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

35

36 # 设置地址与端口,如果是接收任意ip对本服务器的连接,地址栏可空,但端口必须设置

37 address = ('10.0.0.30', 8010)

38 s.bind(address) # 将Socket(套接字)绑定到地址

39 s.listen(True) # 开始监听TCP传入连接

40 print ('Waiting for images...')

41 # 接受TCP链接并返回(conn, addr),其中conn是新的套接字对象,可以用来接收和发送数据,addr是链接客户端的地址。

42 conn, addr = s.accept()

43

44 while True:

45 length = recv_size(conn, 16) # 首先接收来自客户端发送的大小信息

46 if isinstance(length, str): # 若成功接收到大小信息,进一步再接收整张图片

47 stringData = recv_all(conn, int(length))

48 data = numpy.fromstring(stringData, dtype='uint8')

49 decimg = cv2.imdecode(data, 1) # 解码处理,返回mat图片

50 cv2.imshow('SERVER', decimg)

51 if cv2.waitKey(10) == 27:

52 break

53 print('Image recieved successfully!')

54 conn.send("Server has recieved messages!")

55 if cv2.waitKey(10) == 27:

56 break

57

58 s.close()

59 cv2.destroyAllWindows()

客户端

1 #!/usr/bin/python

2 # -*-coding:utf-8 -*-

3 import socket

4 import cv2

5 import numpy

6

7

8 # socket.AF_INET 用于服务器与服务器之间的网络通信

9 # socket.SOCK_STREAM 代表基于TCP的流式socket通信

10 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

11 # 连接服务端

12 address_server = ('10.0.0.30', 8010)

13 sock.connect(address_server)

14

15 # 从摄像头采集图像

16 # 参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频

17 capture = cv2.VideoCapture(0)

18 # capture.read() 按帧读取视频

19 # ret,frame 是capture.read()方法的返回值

20 # 其中ret是布尔值,如果读取帧正确,返回True;如果文件读到末尾,返回False。

21 # frame 就是每一帧图像,是个三维矩阵

22 ret, frame = capture.read()

23 encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 95]

24 while ret:

25 # 首先对图片进行编码,因为socket不支持直接发送图片

26 # '.jpg'表示把当前图片frame按照jpg格式编码

27 # result, img_encode = cv2.imencode('.jpg', frame)

28 img_encode = cv2.imencode('.jpg', frame, encode_param)[1]

29 data = numpy.array(img_encode)

30 stringData = data.tostring()

31 # 首先发送图片编码后的长度

32 sock.send(str(len(stringData)).ljust(16))

33 # 然后一个字节一个字节发送编码的内容

34 # 如果是python对python那么可以一次性发送,如果发给c++的server则必须分开发因为编码里面有字符串结束标志位,c++会截断

35 # for i in range(0, len(stringData)):

36 # sock.send(stringData[i])

37 sock.send(stringData)

38 ret, frame = capture.read()

39 # cv2.imshow('CLIENT', frame)

40 # if cv2.waitKey(10) == 27:

41 # break

42 # 接收server发送的返回信息

43 data_r = sock.recv(50)

44 print (data_r)

45

46 sock.close()

47 cv2.destroyAllWindows()

python传输视频文件_Python视频传输相关推荐

  1. python拆分合并文件_Python 视频文件的分割和合并

    import os; import time; os.system('start "wmplayer.exe", "F:\\abc.mp4"'); --分割代码 ...

  2. 如何把视频文件转换为视频二维码的完整教程

    如何把视频文件转换为视频二维码的完整教程 二维码已经不经意间快速地融入了我们的生活,我们可以通过扫描二维码来添加好友.付款等等, 那么,如何让视频生成二维码直接免费观看和实现分享呢? 「 视频二维码 ...

  3. ffmpeg 实现转码一个普通视频文件为视频mpeg4,音频mp3的功能的程序(摘)

    本程序实现转码一个普通视频文件为视频mpeg4,音频mp3的功能 #include <avcodec.h> #include <avformat.h> #include < ...

  4. python压缩视频文件_python使用zlib库压缩图片,使用ffmpeg压缩视频

    # ffmpeg -i 1.mp4 -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline -crf 2 ...

  5. python读视频文件_python读取和保存视频文件

    如何用python实现视频关键帧提取并保存为图片?也许你会觉得对小编多做一点事你会觉得你很爽,可是在小编看来这是不屑的 import cv2vc = cv2.VideoCapture('Test.av ...

  6. python 视频库_Python视频编辑库:MoviePy

    MoviePy MoviePy是一个关于视频编辑的python库,主要包括:剪辑,嵌入拼接,标题插入,视频合成(又名非线性编辑),视频处理,和自定制效果.可以看gallery中的一些实例来了解用法.M ...

  7. python 视频库_Python视频编辑库MoviePy的使用

    moviepy官网: https://pypi.org/project/moviepy/ 是一个用于视频编辑的Python库:切割.连接.标题插入.视频合成.非线性编辑,视频处理和定制效果的创建. G ...

  8. python怎么创建文件夹视频_怎么用python创建文件夹

    Python中创建文件夹的方法:import os def mkdir(path): folder = os.path.exists(path) if not folder:              ...

  9. python读取手机文件_python 读取 网络 文件

    Python之pandas数据加载.存储 Python之pandas数据加载.存储 0. 输入与输出大致可分为三类: 0.1 读取文本文件和其他更好效的磁盘存储格式 2.2 使用数据库中的数据 0.3 ...

最新文章

  1. 智能改变未来,创新引领世界,第二届深圳国际人工智能展暨智能制造创新高峰论坛盛大启幕!
  2. 编译器编译报错时aka是什么意思?(also known as)
  3. PyQt、QtDesigner及其它工具包的安装
  4. 理解Vue 2.5的Diff算法
  5. 肝!Python 网络编程
  6. 用node.js读写文件
  7. linux怎么还原bak文件,Linux restore命令:还原dump操作备份下的文件、目录或分区...
  8. ipython是解释器吗_Ipython 解释器
  9. Http Handler 介绍
  10. JSP九大内置对象和四大作用域
  11. Sun jdk, Openjdk, Icedtea jdk关系
  12. foxmail邮箱服务器类型,foxmail
  13. 怎样设置计算机安全模式,电脑怎样进入安全模式
  14. 免费思维导图mindmanager2020下载安装(附序列号)
  15. javaScript中的特殊字符
  16. 一个基于MFC的QQ机器人框架
  17. 安装Mysql时:没有可用软件包 mysql-server。
  18. 如何快速搜索电脑文件
  19. 黑苹果OC引导 多彩绚丽霓虹 主题及安装教程
  20. Urule Pro 普通决策表的应用,Excel导入决策表

热门文章

  1. 投资 - 出口 - 消费
  2. review设备管理
  3. Unity开发Excel表格读取器
  4. 二维空间最近点对问题 python
  5. MBR和GUID分区表
  6. VMware 中CentOS 8设置固定IP同时连接内外网
  7. GNSS星历数据读取
  8. 计算机一级考试题电子表格,2017计算机一级Excel模拟考试题
  9. 南卡和苹果蓝牙耳机哪个好?高颜值且音质好的蓝牙耳机推荐
  10. openstack ovs-vswitch收包流程