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

我这边有一块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
        )

猜你喜欢

转载自blog.csdn.net/linxizi0622/article/details/129170947