资源简介

基于python3 opencv 视频采集,采用TCP协议进行双路视频传输,以及双显示界面实现

资源截图

代码片段和文件信息

#!/usr/bin/env python
# -*- coding:utf-8 -*- 
# Author: K_liu
‘‘‘
这是一个客户端程序,由于需要显示两路视频画面,所以采用pygame来进行编写程序,Opencv界面可定制化没有pygame灵活
当然大家也可以采用python的其他GUI开发工具。
‘‘‘
import socket
import cv2
import struct
import numpy
import pygame
from pygame.locals import *
from sys import exit
global image1
global image2

# Configuration file
pygame.init() # 初始化pygame
window_size = (1280 480) # 设置显示界面大小
screen = pygame.display.set_mode(window_size 0 32) # pygame显示设置
pygame.display.set_caption(‘Two Camera Show‘) # 设置显示标题
pygame.display.flip()
clock = pygame.time.Clock()

def Get_image():
    info = struct.unpack(“lhh“ client_socket.recv(8)) # 进行数据包解包操作
    flag = info[1] # flag是为了辨别是那一路信号,采用0和1进行区分,详情请见服务器段程序
    print(‘模拟指令:{}‘.format(info[2]))
    buf_size = info[0]  # 获取读的图片总长度
    if buf_size:
        try:
            buf = b““  # 代表bytes类型
            temp_buf = buf
            while (buf_size):  # 读取每一张图片的长度
                temp_buf = client_socket.recv(buf_size)
                buf_size -= len(temp_buf)
                buf += temp_buf  # 获取图片
                data = numpy.fromstring(buf dtype=‘uint8‘)  # 按uint8转换为图像矩阵
                image = cv2.imdecode(data 1)  # 图像解码
                return image flag
        except:
            pass

def ShowImage():
    while (1):
        for event in pygame.event.get():
            if event.type == QUIT:
                exit()
        frame flag = Get_image()
        if flag == 0:
            image1 = frame
            flag1 = flag
            frame1 = cv2.cvtColor(image1 cv2.COLOR_BGR2RGB)#将图片转换成RGB格式,Opencv采用的是BGR
            frame1 = numpy.rot90(frame1)
            frame1 = pygame.surfarray.make_surface(frame1) # 转换成pygame的背景格式
            screen.blit(frame1 (0 0)) # 进行背景渲染

        elif flag == 1:
            image2 = frame
            flag2 = flag
            frame2 = cv2.cvtColor(image2 cv2.COLOR_BGR2RGB)
            frame2 = numpy.rot90(frame2)
            frame2 = pygame.surfarray.make_surface(frame2)
            screen.blit(frame2 (6400))
        pygame.display.update() # 刷新背景



if __name__ == ‘__main__‘:
    addr_port = (‘127.0.0.1‘ 8080)
    client_socket = socket.socket(socket.AF_INET socket.SOCK_STREAM)
    client_socket.setsockopt(socket.SOL_SOCKET socket.SO_REUSEADDR 1)  # 端口可复用
    client_socket.connect(addr_port)
    print(“IP is %s:%d“ % (addr_port[0] addr_port[1]))
    ShowImage()



 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2870  2018-08-01 18:05  双路视频传输系统\camera_change_client.py
     文件        2537  2018-08-01 18:05  双路视频传输系统\camera_change_server.py

评论

共有 条评论