我这边有一块rock3a开发板,并童工USB接口外接一个USB 海康威视高清摄像头(200万像素)
首先源码编译aarch版本的opencv,之前的博客中有讲,这里不再赘述
进入linux开发界面,查找USB摄像头的设备号
键入命令 ls /dev/video*
这里我们取 /dev/video0作为USB摄像头的设备号
然后编写代码,在客户端(开发板端)编写代码:通过opencv获取摄像头视频并将其通过UDP协议传送至服务器端
client.cpp
扫描二维码关注公众号,回复:
14647056 查看本文章
#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
)