1、编译环境
1、香橙派官方Ubuntu22.04
Orangepi5plus_1.0.8_ubuntu_jammy_desktop_xfce_linux6.1.43.img
2、opencv版本:opencv4.9.0
2、编译步骤
2.1、更新软件源
sudo apt update
sudo apt upgrate
2.2、安装依赖包
sudo apt install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev libopenblas-dev liblapack-dev libprotobuf-dev protobuf-compiler libgoogle-glog-dev libgflags-dev libgphoto2-dev libeigen3-dev libhdf5-dev doxygen
2.3、下载opencv源码包
https://codeload.github.com/opencv/opencv/zip/refs/tags/4.9.0
2.4、进入解压后的文件内创建目录
cd opencv
mkdir bulid install
bulid目录存放编译的文件;install目录存放opencv的编译安装后的库
2.5、使用Cmake配置opencv
cd bulid
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/之前创建的安装目录的路径 -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_opencv_java=OFF -D BUILD_opencv_python3=ON -D WITH_OPENMP=OFF -D WITH_GSTREAMER_0_10=OFF -D WITH_VTK=OFF -D WITH_LIBV4L=ON -D WITH_OPENMP=ON -D WITH_OPENGL=ON -D WITH_TBB=ON -D BUILD_SHARED_LIBS=ON -D ENABLE_PIC=ON -D WITH_ARITH_DEC=ON -D WITH_ARITH_ENC=ON -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D WITH_IMGCODEC_HDR=ON -D WITH_IMGCODEC_PXM=ON -D WITH_IMGCODEC_SUNRASTER=ON -D WITH_JASPER=ON -D WITH_JPEG=ON -D WITH_LAPACK=ON -D WITH_PNG=ON -D WITH_QT=ON -D WITH_PTHREADS_PF=ON -D WITH_TIFF=ON -D WITH_WEBP=ON -D WITH_GTK=ON -D WITH_OPENCL=ON ..
上面的cmake的安装目录需要填写正自己的。
2.6、编译
sudo make -j8
sudo make install
2.7、可能出现的错误
在编译到29%阶段会出现png库报错。
参考:RK3588编译OpenCV遇到png_set_longjmp_fn和libpng相关的报错解决办法 (orangepi.cn)
解决方案:
sudo mv /usr/lib/libpng12.so /usr/lib/libpng12.so.bak
sudo mv /usr/lib/libpng12.so.0 /usr/lib/libpng12.so.0.bak
之后,安装libpng16。
sudo apt-get install libpng-dev libpng16-16
//编译完成后恢复
sudo mv /usr/lib/libpng12.so.bak /usr/lib/libpng12.so
sudo mv /usr/lib/libpng12.so.0.bak /usr/lib/libpng12.so.0
3.Qt程序测试
编译安装完成后可在,创建的install目录下有下述文件:
将lib目录下的库拷贝到 /lib 中。
在Qt中的 .pro文件中,添加opencv的头文件和库的路径
main函数的测试代码
#include "opencv2/objdetect.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main(int, char**)
{
//数据帧
Mat frame;
//定义摄像头
VideoCapture cap;
int deviceID = 0; // 0 = open default camera 0 默认 摄像头
int apiID = cv::CAP_ANY; // 0 = autodetect default API 0 自动 监测 摄像头采集的 格式
cap.open(deviceID, apiID); //打开摄像头
if (!cap.isOpened()) //判断摄像头 是否打开
{
cerr << "ERROR! Unable to open camera\n";
return -1;
}
cout << "Start grabbing" << endl
<< "Press any key to terminate" << endl;
// 死循环,不断采集数据
for (;;)
{
cap.read(frame); //读取采集的数据 放入 数据帧中
if (frame.empty()) {
cerr << "ERROR! blank frame grabbed\n";
break;
}
imshow("Live", frame); // 把 帧 显示出来
if (waitKey(5) >= 0)
break;
}
return 0;
}
硬件:
最终效果图
opencv4.9库链接
链接:https://pan.baidu.com/s/1-lEx4L1SHUzAL9wLbH1rvg?pwd=s0qy
提取码:s0qy
参考文献
RK3588 ubuntu系统安装opencv_rk3588安装opencv4.9.0-CSDN博客
RK3588编译Opencv最新版 - Rubyen2333 - 博客园 (cnblogs.com)
RK3588编译OpenCV遇到png_set_longjmp_fn和libpng相关的报错解决办法 (orangepi.cn)