精华内容
下载资源
问答
  • 论述3G网络图像传输的发展现状、灭火救援现场3G网络图像传输的实现方案、优缺点及其应用展望。
  • 研究论文-一种实时的网络图像传输系统的设计
  • 提出了基于双正交重叠变换的井下多媒体传感器网络长距离多节点协同图像压缩传输机制,并将其仿真结果与传统簇结构图像传输机制的仿真结果进行了比较,证明了LDMCIC算法的在煤矿井下应用的有效性和实用性。
  • 介绍一种以MV3018和S3C4510B为核心的嵌入式网络图像传输系统的解决方案。其中MV3018用于实现图像的硬件编码。在$3C4510B上运行uClinux操作系统以实现多任务管理。
  • 根据煤矿巷道狭长的特点,设计一种煤矿井下救灾应急通信系统,并以此系统框架为基础提出了适于井下长距离分布式图像编码传输技术和基于伙伴协助的图像传输方案:多媒体节点将采集到的图像首先进行量化处理,然后将...
  • 使用短距通信技术来进行图像传输 Zigbee网络中的图像传输
  • 网络传真机是将待传真的图、文稿件等自动扫描成图像文件,然后通过网络传真协议将数据文件发到...本文设计的网络传真图像传输系统可以将传真数据通过Inte-rnet网络发送到目标端,不但速度快而且可以有效地节省网络费用
  • 传统的图像传输系统具有体积大、使用范围有限等缺点,因此,本文提出了基于ARM与4G网络图像传输系统。该方案以ARM电路板i.MX6Q处理器为核心,硬件平台采用USB摄像头、4G无线网卡与Android智能手机,软件平台采用...
  • 基于ARM与4G网络图像传输系统设计与实现
  • Delphi通过网络进行图像传输..rar
  • 本文设计的网络传真图像传输系统可以将传真数据通过Inte-rnet网络发送到目标端,不但速度快,而且可以有效地节省网络费用。也称电子传真。它整合了电话网、智能网和互联网技术。能通过互联网发送和接收传真,不需要...
  • 基于网络的静态图像传输软件中的关键技术研究,刘志海,史大光,对基于网络的静态图像传输软件的系统方案、图文传输的方式进行了比较全面的分析和描述,为实现基于网络模式的静态图像传输功能奠
  • 无线图像传输系统从应用层面来说分为两大类,一是固定点的图像监控传输系统,二是移动视频图像传输系统。  固定点的无线图像监控传输系统,主要应用在有线闭路监控不便实现的场合,比如港口码头的监控系统、河流...
  • 单片机图像采集与网络传输、电子技术,开发板制作交流
  • 基于实时的网络的远程图像传输技术.ppt
  • 本文设计的网络传真图像传输系统可以将传真数据通过Inte-rnet网络发送到目标端,不但速度快,而且可以有效地节省网络费用。也称电子传真。它整合了电话网、智能网和互联网技术。能通过互联网发送和接收传真,不需要...
  • 基于ARM与4G网络图像传输系统设计与实现.pdf
  • 本代码主要实现的是利用网络传输图片,用在我的树莓派项目之上。该项目在PC上运行服务端,树莓派上运行客户端,两者连接到同一局域网中,修改代码中的IP地址,就可以实现将树莓派采集到的图像数据实时传输到PC端。先...
  • 无线多媒体传感网络图像传输,宗庆福 ,,无线传感器网络是计算机科学技术的一个新的研究领域,它己逐渐成为工业界及学术界的一个研究热点。无线传感器网络集成了传感器、
  • 基于GPRS网络图像传输自适应算法及实现,朱丽军,刘高平,根据通用分组无线业务(general packet radio service,GPRS)网络的特点,提出了一种传输控制协议(transfer control protocol, TCP)和用户数据报协�
  • 基于以太网芯片的图像传输系统网络接口设计.pdf
  • 传统的远距离监控、图像传输一般采用专门光缆或微波进行传递,容易受到地形和线路的限制,且造价极高,一般用户难以接受,因此,不易推广应用。 目前,公共电话网(PSTN)已普及全国,如果远程监控传输系统与一般的...
  • 提出了一种在网络环境下远程控制系统中传输图像实现的坐标转换技术及其IZW压缩算法。
  • 实现了在多障碍物环境下的无线传感器网络中的图像传输.传统的图像传输均采用有线的方式.随着无线通信技术的发展,它也被用来传榆图像.但是这些最初的无线传输技术只能够点对点传输、对硬件要求高、成本昂贵.在无线...
  • 基于移动自组织网络图像传输系统优化研究,杨天昊,李文生,无线自组织网络是物联网发展中网络结构的发展方向,该网络可以将若干独立可移动节点连接起来形成一个自发现,自寻路的移动网络
  • TCP实时图像传输

    千次阅读 多人点赞 2020-08-28 14:55:22
    之前尝试过使用UDP进行图像传输,而UDP协议要求包小于64K,对于较大的图像,需要使用分片压缩的方式进行传输,操作较复杂,同时不能保证图片的每一部分都能够正确传输。详见:UDP实时图像传输,UDP实时图像传输进阶...

    之前尝试过使用UDP进行图像传输,而UDP协议要求包小于64K,对于较大的图像,需要使用分片压缩的方式进行传输,操作较复杂,同时不能保证图片的每一部分都能够正确传输。详见:UDP实时图像传输UDP实时图像传输进阶篇——1080P视频传输

    TCP对于传输的数据大小没有限制,同时TCP在发送失败时还有重传机制,可以保证传输的可靠性,所以本文将使用TCP协议来进行图像的实时传输。

    基本流程

    TCP连接过程见后面的程序,一般服务端创建一个套接字,绑定本地IP,开启监听,然后客户端也创建一个套接字,连接服务端就可以了,详见后面的代码。直接介绍数据传输流程,如下图:

    01流程图

    由于TCP是以字节流的形式发送数据的,不能预知数据的大小,所以客户端在发送图像数据之前,需要先发送数据长度等信息。同时为了防止粘包(服务端接收到的数据会先缓存在缓冲区,在接收一次数据后,如果不及时处理,下一次接收到的数据也会送到缓冲区。由于这些数据都是字节流形式的,这样两次接收到的数据就会黏在一起,无法分开),客户端在发送完数据长度信息后,不能马上发送图像数据,需要等待服务端返回的应答信号。客户端接收到应答信号后,就可以开始发送图像字节流数据了。服务端完成图像数据接收后,还要返回给客户端一个应答信号,通知客户端开始下一帧图像的传输

    程序实现

    与前两篇文章不同,本文使用Python来实现主要功能(因为方便)。

    运行环境

    • 软件环境:Python3.8
    • 硬件环境:千兆网口(低分辨率下百兆也行)、i3及以上的CPU

    服务端

    #-*- coding: UTF-8 -*- 
    import socket
    import cv2
    import numpy as np
    
    HOST = ''
    PORT = 8080
    ADDRESS = (HOST, PORT)
    # 创建一个套接字
    tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定本地ip
    tcpServer.bind(ADDRESS)
    # 开始监听
    tcpServer.listen(5)
    
    while True:
        print("等待连接……")
        client_socket, client_address = tcpServer.accept()
        print("连接成功!")
        try:
            while True:
                # 接收标志数据
                data = client_socket.recv(1024)
                if data:
                    # 通知客户端“已收到标志数据,可以发送图像数据”
                    client_socket.send(b"ok")
                    # 处理标志数据
                    flag = data.decode().split(",")
                    # 图像字节流数据的总长度
                    total = int(flag[0])
                    # 接收到的数据计数
                    cnt = 0
                    # 存放接收到的数据
                    img_bytes = b""
    
                    while cnt < total:
                        # 当接收到的数据少于数据总长度时,则循环接收图像数据,直到接收完毕
                        data = client_socket.recv(256000)
                        img_bytes += data
                        cnt += len(data)
                        print("receive:" + str(cnt) + "/" + flag[0])
                    # 通知客户端“已经接收完毕,可以开始下一帧图像的传输”
                    client_socket.send(b"ok")
    
                    # 解析接收到的字节流数据,并显示图像
                    img = np.asarray(bytearray(img_bytes), dtype="uint8")
                    img = cv2.imdecode(img, cv2.IMREAD_COLOR)
                    cv2.imshow("img", img)
                    cv2.waitKey(1)
                else:
                    print("已断开!")
                    break
        finally:
            client_socket.close()
    

    客户端

    #-*- coding: UTF-8 -*- 
    import cv2
    import time
    import socket
    
    # 服务端ip地址
    HOST = '192.168.0.100'
    # 服务端端口号
    PORT = 8080
    ADDRESS = (HOST, PORT)
    
    # 创建一个套接字
    tcpClient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 连接远程ip
    tcpClient.connect(ADDRESS)
    
    cap = cv2.VideoCapture(0)
    while True:
        # 计时
        start = time.perf_counter()
        # 读取图像
        ref, cv_image = cap.read()
        # 压缩图像
        img_encode = cv2.imencode('.jpg', cv_image, [cv2.IMWRITE_JPEG_QUALITY, 99])[1]
        # 转换为字节流
        bytedata = img_encode.tostring()
        # 标志数据,包括待发送的字节流长度等数据,用‘,’隔开
        flag_data = (str(len(bytedata))).encode() + ",".encode() + " ".encode()
        tcpClient.send(flag_data)
        # 接收服务端的应答
        data = tcpClient.recv(1024)
        if ("ok" == data.decode()):
            # 服务端已经收到标志数据,开始发送图像字节流数据
            tcpClient.send(bytedata)
        # 接收服务端的应答
        data = tcpClient.recv(1024)
        if ("ok" == data.decode()):
            # 计算发送完成的延时
            print("延时:" + str(int((time.perf_counter() - start) * 1000)) + "ms")
    

    注:如果是Python3.7及以下版本,则将time.perf_counter()改为time.clock()即可

    参考

    TCP、UDP数据包大小的限制

    SOCK_STREAM和SOCK_DGRAM两种类型的区别

    OpenCV-Python cv2.imdecode()和cv2.imencode() 图片解码和编码

    TCP 中的缓冲区

    python 使用socket传输图片视频等文件的实现方式

    展开全文
  • python opencv 图像网络传输

    千次阅读 2018-12-02 09:25:37
    本代码主要实现的是利用网络传输图片,用在我的树莓派项目之上。该项目在PC上运行服务端,树莓派上运行客户端,两者连接到同一局域网中,修改代码中的IP地址,就可以实现将树莓派采集到的图像数据实时传输到PC端。先...

           本代码主要实现的是利用网络传输图片,用在我的树莓派项目之上。该项目在PC上运行服务端,树莓派上运行客户端,两者连接到同一局域网中,修改代码中的IP地址,就可以实现将树莓派采集到的图像数据实时传输到PC端。先运行服务端代码,然后运行客户端代码即可。树莓派摄像头使用的是普通的USB摄像头,并且在树莓派上安装了opencv,在树莓派上安装opencv的过程可以参考https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/。最后,该代码稍加修改就可以传输其他的信息,当然服务端,客户端也可以同时在PC上运行,以验证结果。所以本质还是希望读者借此代码可以了解python的socket编程。代码意义已在注释中详细说明,仅供参考。使用时请注意修改IP地址和端口号。

    以下是服务端代码:

    import socket
    import time
    import cv2
    import numpy
    
    def ReceiveVideo():
    	#IP地址'0.0.0.0'为等待客户端连接
    	address = ('0.0.0.0', 8002)
    	#建立socket对象,参数意义见https://blog.csdn.net/rebelqsp/article/details/22109925
    	#socket.AF_INET:服务器之间网络通信 
    	#socket.SOCK_STREAM:流式socket , for TCP
    	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    	#将套接字绑定到地址, 在AF_INET下,以元组(host,port)的形式表示地址.
    	s.bind(address)
    	#开始监听TCP传入连接。参数指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。
    	s.listen(1)
    
    	def recvall(sock, count):
    		buf = b''#buf是一个byte类型
    		while count:
    			#接受TCP套接字的数据。数据以字符串形式返回,count指定要接收的最大数据量.
    			newbuf = sock.recv(count)
    			if not newbuf: return None
    			buf += newbuf
    			count -= len(newbuf)
    		return buf
    		
    	#接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。addr是连接客户端的地址。
    	#没有连接则等待有连接
    	conn, addr = s.accept()
    	print('connect from:'+str(addr))
    	while 1:
    		start = time.time()#用于计算帧率信息
    		length = recvall(conn,16)#获得图片文件的长度,16代表获取长度
    		stringData = recvall(conn, int(length))#根据获得的文件长度,获取图片文件
    		data = numpy.frombuffer(stringData, numpy.uint8)#将获取到的字符流数据转换成1维数组
    		decimg=cv2.imdecode(data,cv2.IMREAD_COLOR)#将数组解码成图像
    		cv2.imshow('SERVER',decimg)#显示图像
    		
    		#进行下一步处理
    		#。
    		#。
    		#。
    
            #将帧率信息回传,主要目的是测试可以双向通信
    		end = time.time()
    		seconds = end - start
    		fps  = 1/seconds;
    		conn.send(bytes(str(int(fps)),encoding='utf-8'))
    		k = cv2.waitKey(10)&0xff
    		if k == 27:
    			break
    	s.close()
    	cv2.destroyAllWindows()
    
    if __name__ == '__main__':
    	ReceiveVideo()

    以下是客户端代码:

    import socket
    import cv2
    import numpy
    import time
    
    def SendVideo():
    	#建立sock连接
    	#address要连接的服务器IP地址和端口号
    	address = ('127.0.0.1', 8002)
    	try:
    		#建立socket对象,参数意义见https://blog.csdn.net/rebelqsp/article/details/22109925
    		#socket.AF_INET:服务器之间网络通信 
    		#socket.SOCK_STREAM:流式socket , for TCP
    		sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    		#开启连接
    		sock.connect(address)
    	except socket.error as msg:
    		print(msg)
    		sys.exit(1)
    
    	#建立图像读取对象
    	capture = cv2.VideoCapture(0)
    	#读取一帧图像,读取成功:ret=1 frame=读取到的一帧图像;读取失败:ret=0
    	ret, frame = capture.read()
    	#压缩参数,后面cv2.imencode将会用到,对于jpeg来说,15代表图像质量,越高代表图像质量越好为 0-100,默认95
    	encode_param=[int(cv2.IMWRITE_JPEG_QUALITY),15]
    
    	while ret:
    		#停止0.1S 防止发送过快服务的处理不过来,如果服务端的处理很多,那么应该加大这个值
    		time.sleep(0.01)
    		#cv2.imencode将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输
    		#'.jpg'表示将图片按照jpg格式编码。
    		result, imgencode = cv2.imencode('.jpg', frame, encode_param)
    		#建立矩阵
    		data = numpy.array(imgencode)
    		#将numpy矩阵转换成字符形式,以便在网络中传输
    		stringData = data.tostring()
    		
    		#先发送要发送的数据的长度
    		#ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串
    		sock.send(str.encode(str(len(stringData)).ljust(16)));
    		#发送数据
    		sock.send(stringData);
    		#读取服务器返回值
    		receive = sock.recv(1024)
    		if len(receive):print(str(receive,encoding='utf-8'))
    		#读取下一帧图片
    		ret, frame = capture.read()
    		if cv2.waitKey(10) == 27:
    			break
    	sock.close()
    	
    if __name__ == '__main__':
    	SendVideo()

     

    展开全文
  • 多媒体传感器网络中基于两跳簇结构的图像传输方案
  • 基于opencv图像传输

    2015-06-23 19:56:40
    主要是应用opencv库获取图像,然后通过网络传输,模拟完成摄像头监控

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,346
精华内容 39,738
关键字:

网络图像传输