首页 > 编程语言 >udp接收上位机编程(2)彩色图像

udp接收上位机编程(2)彩色图像

时间:2023-08-01 16:25:09浏览次数:47  
标签:index udp 彩色图像 img 编程 pkg recv size

由于QT上位机只能接收BGR565的图像格式,且只能显示灰度或者RGB888,所以PL2PS的数据必须要变换位置,并使用cvtColor函数进行转换

1 void MainWindow::recieve_dis(int udp_index)
2 {
3     Mat recv_img_2(img_h_size, img_w_size, CV_8UC2);
4     Mat recv_img_3(img_h_size, img_w_size, CV_8UC3);
5 
6     recv_img_2.data = (uchar*)receive->img_buf + udp_index * pkg_size * pkg_num;
7 
8     cvtColor(recv_img_2, recv_img_3, CV_BGR5652RGB);
}

 在发送彩色图像的时候,由于以太网速率变大,正在显示img_buf的时候,下一帧图像已经在更新了,那么就会出现图像撕裂的情况,写入和读取不能够在同一帧,所以在上位机做一个乒乓操作,通过传入的udp_index作为帧索引

 1 void udpthread::run()
 2 {
 3     while (!stopped)
 4     {
 5         int recv = recvfrom(hServer, udp_buf, sizeof(udp_buf), 0, (SOCKADDR*)&addrClient, (int*)&nlen);
 6         if (recv>0)
 7         {
 8             data_head *packageHead = (data_head *)udp_buf;
 9             if (packageHead->pkg_cnt < 1440)
10             {
11                 memcpy(img_buf + udp_index*pkg_size*pkg_num + packageHead->pkg_cnt*pkg_size, udp_buf + sizeof(data_head), pkg_size);
12             }
13 
14             if (packageHead->pkg_cnt == pkg_num - 1)
15             {
16                 emit recivok(udp_index);
17 
18                 if (udp_index == 0)
19                 {
20                     udp_index = 1;
21                 }
22                 else
23                 {
24                     udp_index = 0;
25                 }
26             }
27         }
28     }
29 }
 1 void MainWindow::recieve_dis(int udp_index)
 2 {
 3     Mat recv_img_2(img_h_size, img_w_size, CV_8UC2);
 4     Mat recv_img_3(img_h_size, img_w_size, CV_8UC3);
 5 
 6     recv_img_2.data = (uchar*)receive->img_buf + udp_index * pkg_size * pkg_num;
 7 
 8     cvtColor(recv_img_2, recv_img_3, CV_BGR5652RGB);      //BGR565转RGB888
 9 
10     bmp = recv_img_3;
11 
12     image = MatImageToQt(recv_img_3);
13     pixmap = QPixmap::fromImage(image);
14     ui.img_map->setPixmap(pixmap);
15 
16     recvImageNum++;
17 
18     ui.recv_cnt->setText(QString::number(recvImageNum));
19 
20     if (recordvideo == 1)
21     {
22         cap_save.write(recv_img_3);
23     }
24 }

 

标签:index,udp,彩色图像,img,编程,pkg,recv,size
From: https://www.cnblogs.com/tuzki9611/p/17596382.html

相关文章

  • tf坐标系广播羽监听的编程实现
    创建功能包cd~/catkin_ws/srccatkin_create_pkglearning_tfroscpprospyturtlesimtf广播器和监听器代码如何实现一个tf广播器定义TF广播器(TransformBroadcaster)创建坐标变换值发布坐标变换(sendTransform)turtle_tf_broadcaster.cpp点击查看代码/***该例程产......
  • iTOP-i.MX6ULL开发板Qt 串口编程
    本章内容对应视频讲解链接(在线观看):QT上位机开发之串口助手(上)→B站搜索标题→【北京迅为】嵌入式学习之QT学习篇QT上位机开发之串口助手(下)→B站搜索标题→【北京迅为】嵌入式学习之QT学习篇本节我们使用Qt来编写一个简单的上位机。实验介绍:组装ui界面,使用Qt提供的串口类......
  • GO 编程模式:FUNCTIONAL OPTIONS
    在本篇文章中,我们来讨论一下FunctionalOptions这个编程模式。这是一个函数式编程的应用案例,编程技巧也很好,是目前在Go语言中最流行的一种编程模式。但是,在我们正式讨论这个模式之前,我们需要先来看看要解决什么样的问题。本文是全系列中第3/10篇:Go编程模式Go编程模式:切片,接口......
  • (Python编程)基本的内嵌技术
    ProgrammingPython,3rdEdition翻译最新版本见wiki:http://wiki.woodpecker.org.cn/moin/PP3eD欢迎参与翻译与修订。23.3.BasicEmbeddingTechniques23.3.基本的内嵌技术Asyoucanprobablytellfromtheprecedingoverview,thereismuchfl......
  • 记录每一天,流式编程 stream
    流式编程stream我以为遇到lambda已经够让我惊喜了,万万没想到stream的出现,才让我发现它才是函数式编程的主角。特点:无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/Ochannel等。对stream的任何修改都不会修......
  • 零基础应该如何学习计算机编程?
    一、编程的概念让我们简单介绍一下编程。编程是人与计算机之间的一种交流方式,通过编写一系列的程序指令,指导计算机执行相应的任务。专门从事编程工作的技术人员被称为程序员。在计算机领域,编程可以细分为许多技术方向。从整体上看,可以分为两类,即高层编程和低层编程。当......
  • 编程实现邮件地址有效性检测
    这个VB6COM组件提供了一项即时邮件查询的功能。它有效的避免了向一个不存在的账户发送邮件的情况。例如,在ASP页面里面检查用户输入的邮件地址是否正确,并避免在你的用户数据库里面存储相关的错误信息。主要内容工作原理让我们首先来看一下这个组件是如何进行工作的。首先给定一个E-......
  • (Python编程)目录工具
    ProgrammingPython,3rdEdition翻译最新版本见wiki:http://wiki.woodpecker.org.cn/moin/PP3eD欢迎参与翻译与修订。   4.3.DirectoryTools 4.3.目录工具Oneofthemorecommontasksintheshellutilitiesdomainisapplyinganoperationtoasetoffilesin......
  • python教程 入门学习笔记 第3天 编程基础常识 代码注释 变量与常量
    编程基础常识一、注释1、对代码的说明与解释,它不会被编译执行,也不会显示在编译结果中2、注释分为:单行注释和多行注释3、用#号开始,例如:#这是我的第一个python程序4、注释可以写在单独一行,也可以写在一句代码后面5、不想执行编译,又不能删除的代码,可以先用#注释掉,代码批量注释......
  • SAS 编程技巧 - PROC SQL(二)
    上一节中,我们介绍了如何使用SQL创建和删除数据集、视图和索引。这一节我们介绍如何使用SQL修改数据集的结构和更新数据集中的数据。修改数据集结构使用ALTERTABLE可以修改数据集的结构,包括增加、删除变量、修改变量属性,以及对数据完整性约束(integrityconstraints)的操作......