硬件:orangepi 3 LTS
之前安装opencv的时候遇到了很多奇奇怪怪的错误,所以干脆重新写入系统后开始安装。
安装Ubuntu22.04的过程按照官方提供的用户手册来操做
官方用户手册下载链接:http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3-LTS.html
然后开始下载opencv所需的一下依赖
sudo apt-get install g++ sudo apt-get install cmake sudo apt-get install unzip sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev
按照官方所提供的系统默认的下载源(清华源),上面的这些依赖都是可以直接安装好不会报错的。
接下来去修改下载源
sudo nano /etc/apt/sources.list
在最后面添加
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main
保存然后退出
在终端输入
sudo apt update
到这一步可能会出现这样的报错
这是因为公钥产生的报错,报错后在终端输入
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
然后重新输入
更新完后我们再下载两个依赖
sudo apt-get install libjasper-dev libdc1394-dev
到这一步必须的依赖就下载完了。
下载链接:https://opencv.org/releases/
这里我们选择下载源码,可以根据自己的需要下载对应的版本。
可以直接在Ubuntu里面下载,我这把选择的是在windows中下载好后通过Xftp传到Ubuntu中
打开Ubuntu终端,进入到刚刚接收opencv-4.5.1.zip的文件夹,再终端中输入
unzip opencv-4.5.1
opencv-4.5.1有一个小bug,用nano打开文件
nano ./opencv-4.5.1/modules/gapi/test/gapi_async_test.cpp
添加图片中框出来的内容,保存然后退出。
回到刚刚接收opencv-4.5.1.zip的文件夹,输入以下命令
cd opencv-4.5.1 mkdir build cd build
开始Cmake编译
最基本的添加项可以按照这个来:
sudo cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
输出以上内容即表示Cmake编译成功。
输入以下内容开始编译:
sudo make -j4
这个过程可能要花费一到两个小时
输出以上内容表示编译完成,然后在终端输入以下内容开始下载
sudo make install
输出以上内容表示安装完成。
在终端中输入以下命令
sudo nano /etc/ld.so.conf.d/opencv.conf
输入以下内容:/usr/local/lib
保存然后退出。
在终端中输入:
sudo ldconfig
然后配置环境变量:
sudo nano /etc/bash.bashrc
将下面的内容添加到文件末尾
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
随后在终端输入以下内容让配置生效。
source ~/.bashrc
到这里opencv源码编译安装就已经全部完成了。
在终端输入以下命令可以检验安装是否正确
pkg-config --modversion opencv4
写一个简单的程序来测试以下:
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char** argv) { // 加载图像 Mat image = imread("test.jpg"); // 检查图像是否加载成功 if(image.empty()) { cout << "无法加载图像文件" << endl; return -1; } // 在屏幕上显示图像 namedWindow("Display window", WINDOW_AUTOSIZE); imshow("Display window", image); // 等待按键按下 waitKey(0); return 0; }
讲上面的test.cpp和任意一张名为test.jpg的文件放到同一个文件夹中,然后打开终端,进入到该文件夹,在终端中输入以下命令编译
g++ test.cpp -o test `pkg-config opencv4 --cflags --libs`
编译完成生成可执行文件test
在终端中输入./test即可运行,程序效果为显示test.jpg。
这是一个测试摄像头的程序:
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { VideoCapture cap(0); // 打开默认的摄像头 if (!cap.isOpened()) // 检查摄像头是否成功打开 { cout << "无法打开摄像头" << endl; return -1; } namedWindow("Camera", WINDOW_AUTOSIZE); // 创建窗口 while (true) { Mat frame; cap >> frame; // 读取视频帧 imshow("Camera", frame); // 在窗口中显示视频帧 if (waitKey(30) == 'q') // 按下“q”键退出 { break; } } return 0; }
编译方法和上一个图片测试的程序一样,只需要修改文件名的生成的名字。
运行时提示无法打开摄像头可以试着把程序中“VideoCapture cap(0);"中的0改成1
参考文章:
https://blog.csdn.net/qq_38228260/article/details/126531323?ops_request_misc=&request_id=&biz_id=102&utm_term=ubantu22.04%20%E5%AE%89%E8%A3%85opencv&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-126531323.142^v73^control,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187
https://blog.csdn.net/weixin_45861610/article/details/127169289?ops_request_misc=&request_id=&biz_id=102&utm_term=ubantu22.04%20%E5%AE%89%E8%A3%85opencv&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-127169289.142^v73^control,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187