使用OpenCV进行直播(附代码)

重磅干货,第一时间送达

生活中我们不止一次地使用过直播,但从未想过如何通过编程实现。大家好,我们在这里向大家介绍如何使用OpenCV和python的套接字编程。今天,我们将借助OpenCV和socket编程创建一个实时流媒体应用程序,我们将从头开始为服务器和客户端开发代码。

什么是OpenCV?

Opencv是一个计算机视觉库。该库具有多种功能,因此我们可以使用网络摄像头和编程来处理图像和视频。

什么是socket编程?

简单地说,socket编程意味着使用TCP或UDP等互联网协议在端口上的两个或多个服务器之间进行通信。关于socket和OpenCV的更多信息,我们将在代码中讨论。

开发一个服务器

在服务器上,当客户端连接到服务器时,应用程序将以端口号和IP地址运行,然后服务器接收数据并将其转换为流。在运行代码之前,请确保你们已经下载了python中的以下库:
pip install packagename

opencv-python,numpy,pickle

import cv2, socket, numpy, pickles=socket.socket(socket.AF_INET , socket.SOCK_DGRAM)ip="192.168.1.5"port=6666s.bind((ip,port))

在上面的代码中,我们已经为项目导入了所需的库。"s"变量将存储socket的地址,socket.AF_INET用于表示套接字使用ipv4。socket.sock_DGRAM表示UDP协议,代表用户数据报协议。有时使用它是有风险的,因为假设我们的数据包没有发送给用户,它不会告诉我们,所以我们有数据丢失的风险,而不是它易于使用。我们也可以使用TCP,但这会使我们的代码有点复杂,因此对于basic,我们使用UDP。

"ip"变量包含计算机的ip地址,"port"编号包含运行进程的端口。你们可以根据自己的选择提供任何端口号,因为它只是一个正在运行并暴露于世界的进程。s.bind()函数将绑定"ip"和"端口"号,并将其转换为套接字。简单地说,就是元组。

while True: x=s.recvfrom(1000000) clientip = x[1][0] data=x[0] print(data) data=pickle.loads(data) print(type(data)) data = cv2.imdecode(data, cv2.IMREAD_COLOR) cv2.imshow('server', data) #to open image if cv2.waitKey(10) == 13: breakcv2.destroyAllWindows()

上述函数将从客户端接收数据,并将数据临时存储到"x"变量中。在"clientip"中,我们使用通过切片数组检索的数据存储了客户端的IP地址,数据变量将保存数据。现在,我们将使用函数imdecode对数据变量中接收的数据进行解码,imshow函数将显示一个流窗口。cv2.waitkey(10)将每隔10毫秒单击/收集数据,直到你们按enter键并输入数字13。按enter键时,destroyAllWindows()将关闭应用程序。

配置客户端

现在,当我们将客户端连接到给定的服务器IP和端口号时,它们之间的通信开始。
import cv2, socket, pickle, os s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 10000000)serverip="192.168.1.5"serverport=6666

这里,我们首先导入了socket和OpenCV所需的库,"s"存储socket的地址。AF_INET表示IP系列v4和socket.SOCK_DGRAM此关键字用于UDP协议,第三行将创建一个缓冲区大小,以便我们可以存储数据缓冲区以连续传输数据。"serveip"和"serverport"保存服务器的IP地址和端口号。

cap = cv2.VideoCapture(0)while True: ret,photo = cap.read() cv2.imshow('streaming', photo) ret, buffer = cv2.imencode(".jpg", photo,[int(cv2.IMWRITE_JPEG_QUALITY),30]) x_as_bytes = pickle.dumps(buffer) s.sendto(x_as_bytes,(serverip , serverport)) if cv2.waitKey(10) == 13: break cv2.destroyAllWindows()cap.release()

视频捕获(0)存储功能地址和用于存储网络摄像头的"0"。ret存储返回值和照片,并存储cap.read()的输出。此函数将读取图像。imshow将显示流媒体窗口。缓冲区变量将存储流媒体的数据并将其提供给服务器,这个函数将把数据转储到一个变量中,发送到一个函数将绑定IP和端口号的数据,以便我们可以发送它。waitkey将每隔10毫秒收集一次数据,直到我们按enter键,输入代码为13。destroyAllWindows()将销毁windows,cap.release()将关闭相机。

本文GITHUB代码链接:

https://github.com/abhikesare9/live-streaming-with-opencv

下载1:OpenCV-Contrib扩展模块中文版教程
(0)

相关推荐

  • 计算机视觉(五)双三次插值(Bicubic Interpolation)算法介绍及opencv和matlab的代码实现及区别

    超分辨率基础_插值算法简介 1.插值算法 数学的数值分析领域中,内插或称插值(英语:interpolation)是一种通过已知的.离散的数据点,在范围内推求新数据点的过程或方法.常见的三种插值算法为最 ...

  • Python Opencv捕获视频

    先得安装这个opcv的库 注意选择的Python解释器 我这里还有一个解释器,是thonny的IDE的 装好以后可以看看版本 会发现是可以自动补全的 我们可以在本地的时候放一个图片,读取一下 impo ...

  • python+opencv图像处理(十一)

    图像镜像 图像的镜像指的是将图像以某条线为中心进行镜像对换. 图像的镜像根据翻转的方向可分为水平镜像翻转.垂直镜像翻转和对角镜像翻转3种. 水平镜像翻转指的是将图像以y轴为中心进行左右镜像对换. 垂直 ...

  • python+opencv图像处理(六)

    图像相加 两幅图像是可以加在一起的. 图像相加是通过对两幅大小相同的图像对应位置像素的相加运算,以产生一幅新的含有两幅图像信息的图像的方法.有时也称为图像合成. 1.(+)法 数学运算中的+可以用于图 ...

  • 基于OpenCV的实战:轮廓检测(附代码解析)

    重磅干货,第一时间送达 利用轮廓检测物体可以看到物体的各种颜色,在这种情况下放置在静态和动态物体上.如果是统计图像,则需要将图像加载到程序中,然后使用OpenCV库,以便跟踪对象. 每当在框架中检测到 ...

  • 基于OpenCV实战:绘制图像轮廓(附代码)

    重磅干货,第一时间送达 山区和地形图中海拔高的区域划出的线称为地形轮廓,它们提供了地形的高程图.这些线条可以手动绘制,也可以由计算机生成.在本文中,我们将看到如何使用OpenCV在简单图像上绘制轮廓线 ...

  • 使用Python+OpenCV进行数据增广方法综述(附代码演练)

    原创 磐怼怼 深度学习与计算机视觉 1周前 数据扩充是一种增加数据集多样性的技术,无需收集更多的真实数据,但仍然有助于提高模型的准确性和防止模型过度拟合.在这篇文章中,你将学习使用Python和Ope ...

  • 实战:使用 OpenCV 的自动驾驶汽车车道检测(附代码)

    重磅干货,第一时间送达 一.边缘检测 我们将使用 Canny 进行边缘检测.如果你不确定这是什么,请查阅相关资料,对于后文的阅读会有帮助. def canyEdgeDetector(image): e ...

  • 使用OpenCV进行消失点检测(附代码)

    重磅干货,第一时间送达 简介 消失点的定义:消失点是透视图图像平面上的一个点,三维空间中相互平行的线的二维透视投影(或图形)似乎会聚.图像中的所有东西似乎都汇聚在一个点上,这个点被称为消失点.如上图所 ...

  • 系统设计精选 | 基于FPGA的CAN总线控制器的设计(附代码)

    导读 CAN 总线(Controller Area Network)是控制器局域网的简称,是 20 世纪 80 年代初德国 BOSCH 公司为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一 ...

  • 使用VBA,1分钟汇总几百个工作簿的数据,效率就是高(附代码)

    昨天发了一个汇总工作簿数据的PowerQuery教程,有同学就反应,是旧版本的Excel用不了,也有同学反应是WPS,没有这功能,今天我们就来个通用的方法.如果你经常我们需要合并N多工作簿中的数据到一 ...

  • 浅谈踢人下线的设计思路!(附代码实现方案)

    前言 前两天写了一篇文章,主要讲了下java中如何实现踢人下线,原文链接:java中如何踢人下线?封禁某个账号后使其会话立即掉线! 本来只是简单阐述一下踢人下线的业务场景和实现方案,没想到引出那么多大 ...

  • Python数据分析绘图过程详细讲解(附代码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 作者:小汤豆 来源:汤豆道课 Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 ...