硬件: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 update
更新完后我们再下载两个依赖
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
#include
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
#include
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