linux+opencv 将摄像头视频通过UDP协议发送给服务器端并显示

2023-05-16

我这边有一块rock3a开发板,并童工USB接口外接一个USB 海康威视高清摄像头(200万像素)

首先源码编译aarch版本的opencv,之前的博客中有讲,这里不再赘述

进入linux开发界面,查找USB摄像头的设备号

键入命令 ls   /dev/video* 

 

这里我们取 /dev/video0作为USB摄像头的设备号

然后编写代码,在客户端(开发板端)编写代码:通过opencv获取摄像头视频并将其通过UDP协议传送至服务器端

client.cpp

#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include<bits/stdc++.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(9123); // 服务器端口
    inet_pton(AF_INET, "192.168.0.111", &server_addr.sin_addr.s_addr);
 
    int sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
    if(sock_fd < 0)
        perror("");

    cv::VideoCapture capture; 
    capture.open("/dev/video0");

    cv::Mat image;
    //摄像头读取的图像后续会进行压缩 这里进行压缩相关配置
    std::vector<int> quality;
    quality.push_back(CV_IMWRITE_JPEG_QUALITY);
    quality.push_back(30);//进行50%的压缩
    std::vector<uchar> data_encode;

    while(1)
    {
        capture >> image ; 
        imencode(".jpg", image, data_encode, quality);//将图像编码
        int nSize = data_encode.size();
        unsigned char *encodeImg = new unsigned char[nSize];
        for (int i = 0; i < nSize; i++) { encodeImg[i] = data_encode[i]; }
        //将unsigned char * 指针变量转化为const char * 指针变量 方便进行sendto函数调用
        const char* p = (const char*)(char*)encodeImg;
        sendto(sock_fd, p, nSize, 0, (struct sockaddr *) &server_addr, sizeof(server_addr));
}
     return 0;
}

CMakeList.txt 文件内容如下:

cmake_minimum_required(VERSION 3.1)
project(opencv)
SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++11")
include_directories(/home/rock/opencv_test/test/opencv-linux-aarch64/include)
link_directories(/home/rock/opencv_test/test/opencv-linux-aarch64/lib)
add_executable(opencv opencv.cpp)
target_link_libraries(opencv 
                       /home/rock/opencv_test/test/opencv-linux-aarch64/lib/libopencv_highgui.so.3.4.5
                       /home/rock/opencv_test/test/opencv-linux-aarch64/lib/libopencv_video.so.3.4.5
                       /home/rock/opencv_test/test/opencv-linux-aarch64/lib/libopencv_core.so.3.4.5
                       /home/rock/opencv_test/test/opencv-linux-aarch64/lib/libopencv_videoio.so.3.4.5 
                       /home/rock/opencv_test/test/opencv-linux-aarch64/lib/libopencv_imgproc.so.3.4.5 
                       /home/rock/opencv_test/test/opencv-linux-aarch64/lib/libopencv_imgcodecs.so.3.4.5
        )

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux+opencv 将摄像头视频通过UDP协议发送给服务器端并显示 的相关文章

随机推荐

  • uC/OS-II 一些细节问题

    最高和最低优先级的任务最好不要使用 xff0c 而用户使用的任务多达56个 xff0c 0表示最高优先级 建立任务的函数有两个 OSTaskCreate OSTaskCreateExt xff08 可设置更多任务细节 xff09 OSSta
  • CubeMX配置FreeRTOS

    01 说在前面 RTOS为了提高任务调度效率一般都包含汇编程序 xff0c 因此移植起来需要一些汇编知识 xff0c 就算网上肯定有移植教程 xff0c 初次搞起来还是挺费劲的 初学时对RTOS代码不熟悉 xff0c 一开始就打击了积极性可
  • 云台控制协议VISCA、PELCO-D、PELCO-P

    1 VISCA部分协议命令 控制 命令 格式 备注 预置点 清除预置点 8X 01 04 3F 00 ZZ FF X 61 1 7 8是广播码 xff0c 下同 xff1b ZZ 61 00 3F xff0c 共64个预置点 设预置点 8X
  • lpms-ig1 IMU使用

    1 xff09 打开网址 https bitbucket org lpresearch lpmsig1opensourcelib 实现1 2 3块编译 2 xff09 给串口 ttyUSB0 赋予权限sudo chmod 777 dev t
  • Vitis AI1.1 系列教程1 - 软件安装

    这里写自定义目录标题 我的安装环境 安装过程在VMware中安装ubuntu 16 04安装Vitis AI几个常见的docker指令 我的安装环境 windows 10VMware 15 5Vitis AI 1 1ubuntu 16 04
  • PX4/Pixhawk - 编译环境搭建

    最近在学习px4的二次开发 xff0c 发现网上的环境搭建教程五花八门 xff0c 大多复杂 xff0c 重重踩坑之后 xff0c 发现还是官方的教程好使 xff0c 总结如下 xff1a 环境准备 采用vmware虚拟机搭建环境系统是ub
  • PX4/Pixhawk 教程 - 任务线程 - workqueue 和 task

    介绍 一个完整的px4的应用程序 xff08 或者叫任务 xff09 分为前台部分和后台部分 xff0c 前台部分是跑在shell任务中的 xff0c 比如helloworld那个程序就只有前台部分 xff0c 敲入指令即可在ssh中运行
  • PX4/Pixhawk 教程 - 可视化参数配置和自启动 - param

    px4常见的设置模块自启动的方式有两种 xff0c 一种是在rx xxx文件中添加需要启动的项 xff0c 另一种是通过yaml参数配置文件 通过添加系统启动项 通过修改系统的启动项实现模块的自启动 xff1a 在px4 ROMFS px4
  • PX4/Pixhawk 教程 - uavcan v1 - libcanard传输层最简例子

    介绍 上一篇主要是介绍libcanard的基础知识和函数 xff0c 比较偏理论一点 xff0c 这一篇呢主要注重于实践 主要解决以下问题 xff1a xff08 1 xff09 如何把uavcan v1编译到default标签 xff08
  • 如何把git的submoudule变为本仓库依赖

    介绍 一些著名的开源项目往往运用了大量的其他submodule xff0c 但是对于嵌入式开发 xff0c 我们希望可以维护一个稳定的完整的仓库 xff0c 因此需要把submodule的外部依赖改成本仓库依赖 步骤 删掉仓库根目录下的 g
  • qgroundcontrol编译环境搭建

    qgc编译环境搭建和编译 qt安装 从官网下载安装程序 http www qt io download open source 给安装程序授权 span class token function chmod span 43 x qt uni
  • STM32F4教程从零开始0——从官网获取固件库

    从大二到现在玩stm32也有两年了 xff0c 估计以后用stm32 的机会不多了 xff0c 所以打算写一系列的教程来纪念一下陪我走过大学时光 xff0c 成为我的科技竞赛重要利器的STM32F4 这系列的教程将用stm32F407VGT
  • STM32F4教程从零开始1——建工程

    今天 xff0c 新买的机械到手 xff0c 很开心 xff0c 用得很爽 xff0c 所以决定再写一篇 xff0c 话说这是我第一次买机械键盘 xff0c 我现在也支持程序员可以没有一个好的电脑 xff0c 但必须有一个好的键盘的说法了
  • '\0'就是 字符串结束标志

    39 0 39 就是 字符串结束标志 比如说 xff0c 把一个字符串赋值给数组 xff1a u8 str1 61 34 cxjr 21ic org 34 实际上数组str1在内存中的实际存放情况为 xff1a c x j r 2 1 i
  • Git教程之局域网服务器搭建教程(Gitlab)

    Gitlab局域网服务器搭建教程 简介在ubuntu服务器上安装Gitlab安装过程登入界面常见问题Group项目push失败 xff08 403错误 xff09 如何删除项目 简介 Git是一个程序员必备的版本管理软件 xff0c 个人使
  • QuadrotorFly-四旋翼无人机动力学仿真环境介绍

    QuadrotorFly四旋翼无人机动力学模型 主要目的是开发一个用于无人机动力学仿真的简单易用 功能相对齐全的仿真环境 xff08 也许是水论文环境 xff09 这个仿真是基于python编写的 xff0c GPL开源 git的地址在 x
  • HTML5 APP项目展示响应式网页模板

    简介 xff1a 国外的一款APP项目展示HTML单页模板 1 该模板代码干净整洁 xff1b 2 效果相当的炫酷 xff0c 相当简洁大气高端 xff0c 模板简单 xff0c 全部已数据调用 3 网站手工DIV 43 css xff0c
  • 自动驾驶仿真工具之AirSim简介

    简介 开源 xff0c 跨平台 xff0c 支持Linux Windows PX4 xff0c 基于Unreal Engine xff0c 有Unity版本 xff08 实验版 xff09 Github链接 多种语言API xff0c 包括
  • MobaXterm 远程linux服务器图像界面打不开

    如图所示 xff0c 本人用的是 MobaXterm软件 远程连接linux系统 xff0c 但是显示图形界面的时候 这里无法显示 xff0c 报错 xff1a demo 895 Gtk WARNING 23 06 41 170 canno
  • linux+opencv 将摄像头视频通过UDP协议发送给服务器端并显示

    我这边有一块rock3a开发板 xff0c 并童工USB接口外接一个USB 海康威视高清摄像头 200万像素 首先源码编译aarch版本的opencv xff0c 之前的博客中有讲 xff0c 这里不再赘述 进入linux开发界面 xff0