opencv4,树莓派自己编译opencv

本文记录了作者在树莓派3b+上安装配置OpenCV并进行图像处理的实际经验,包括解决编译错误、配置环境及适配不同版本等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:搞了个树莓派3b+想用来做opencv图像处理,已经在Windows里写好cpp代码,配好环境迁移就行。

流水账:电脑里的opencv是2413(我真是老古董了),官网最新的是4.1.0。

第0次:

apt-get install opencv2

本来以为就简单粗暴,结果python好使,cpp不好使。

 

第一次:寻思自己摸索(以前自己编译过2413)下了源码,下了cmake,依赖库觉得前面apt-get过了就没装

cmake
make
make install

一天后,finish,跑了个例程(还有点波折,后面说),缺gtk库。

第二次:查了必须的库,顺便发现make -j4可以提速。

make -j4,树莓派运行灯常亮,电源灯常灭,键鼠无法操作,熄屏无法唤醒,只有右上角有个闪电符号(后来知道是电量不足提示)。

三天后,死锁结束。其实opencv make打断是可以继续的,再运行make就行,又一天,还是没看到结果,也唤醒不了屏幕。

放弃

以前也跳过坑,可能是最新的版本有bug,也没有什么教程,我还是回去搞2413吧。

第三次,上传2413源码(用ftp,本猿linux很熟),仍然,cmake,make,报错,各种报错

查了资料以后说gcc版本太高导致,大家的做法是降低gcc版本。我不服,旧的东西就得淘汰。

第四次,这次服了,查教程,按部就班。

教程如下,实际仍然有出入,我会写下来。https://blog.youkuaiyun.com/leaves_joe/article/details/67656340

1.刷系统,去掉之前留下的坑。

2.安装各种工具和库,教程是逐个装的,一句话全装进去也可以

sudo apt-get install build-essential cmake git pkg-config 
sudo apt-get install libjpeg8-dev 
sudo apt-get install libtiff5-dev 
sudo apt-get install libjasper-dev 
sudo apt-get install libpng12-dev 
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python-dev python3-dev

大家灵活操作,一定要懂每个库的作用,我懒得抄注释,大家自行百度。之前死锁结束的时候就是卡在python库编译的过程。加上我计划用cpp(迷信cpp的性能,对python也不是特别熟悉,可惜树莓派大部分都是python教程,cpp只能自己摸索),python的库就没装。

我还多装了cmake-gui,功能嘛,嘿嘿

3.cmake-gui,configure,然后勾选需要生成的库,取消不用生成的库,例如python,虽然我没装,但是有可能系统自带了,还要手动取消。(其实后来还是坑在这步,有一个pkg-config的勾落了,导致了一些问题)。然后generate,忘了提上传代码和新建build文件夹的事。

4.进入build文件夹,make或make -j4,仍然提示make -j4会导致键鼠无响应。

5.这次比较顺利,后面出的错就好解决了,make剩不多的的时候如果有打断可以改成make -j3 

6.make install ,sudo ldconfig

7.finish,开始跑例程。我就是一段调用摄像头的代码。

#include "stdafx.h"
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/contrib/contrib.hpp>
#include <iostream>
#include <string> 
#include<windows.h>

using namespace std;
using namespace cv;

Mat src ;
Mat dst, gray, gray1, output_mask, output_mask1, output_mask2, gray2, output_mask3, output_mask4;

int main()
{
	VideoCapture cam(0);
	while (!cam.isOpened())
		waitKey(10);
	//cam.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
	//cam.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
	//cam.set(CV_CAP_PROP_FPS, 30);
	//cam.set(CV_CAP_PROP_EXPOSURE, 0); // where 0.25 means "manual exposure, manual iris"
	//cam.set(CV_CAP_PROP_SETTINGS, 1);//各种相机设置,windows专用
	while (waitKey(10)!= 27)
	{
		cam >> src;
		if (src.empty()) { //判断图像是否载入
			cout << "can not load the frame" << endl;
		}
		else {
			imshow("src", src);
		}
	}
	waitKey();
	return 0;
}

这是windows上的代码,Linux要去掉stdafx.h和windows.h 

8 g++ camera.cpp 报错,找不到opencv2。教程上说要这么运行

gcc test.cpp -o test `pkg-config --cflags --libs opencv`

然后我那边提示找不到opencv,让找opencv.pc,可让我好找啊。没找到。幸好我认识上面的代码,就是先运行pkg-config --cflags --libs opencv再把运行结果加到gcc test.cpp -o test后面运行。

9 我就找了别人运行pkg-config --cflags --libs opencv的结果https://www.jianshu.com/p/7eee92d8ad7b

拼了个超长的编译语句

gcc test.cpp -o test -I/usr/local/Cellar/opencv3/3.1.0_4/include/opencv -I/usr/local/Cellar/opencv3/3.1.0_4/include -L/usr/local/Cellar/opencv3/3.1.0_4/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lippicv -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core

把语句中的地址挨个去找了一遍,替换成我的文件夹里类似的,就是

g++ edge.cpp -o test -I/usr/local/include/opencv4 -I/usr/local/include  -L/usr/local/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core

特别注意的是opencv3变成了opencv4,后面没有路径只有名字的就没检查,运行,果然报错,链接了两个不存在的库。删掉,最终的语句如下

g++ edge.cpp -o test -I/usr/local/include/opencv4 -I/usr/local/include  -L/usr/local/lib -lopencv_stitching -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core

(其实根据代码,我只需要链接用了的库就行,没必要全都链接上)前面第一次运行就已经踩了这个坑,不然根本看不到缺gtk库的提示,可惜语句没保存,我又重新查了一次。

10 再运行,成功

11 我有强迫症,一定要解决pkg-config的问题,怀疑是不是configure的时候落下了,仔细检查,果然,他还有个开头,又全大写,可费眼睛。重新勾选,configure,generate,make,make install,finish,因为前面已经编译过,这次飞快。

12再运行pkg-config --cflags --libs opencv还是提示出错,别着急,pkg-config --cflags --libs opencv4就有内容了

但是前面的短语句还是运行不出来,先放放。

13回来说我要迁移的程序,opencv2413版本的,有好多区别,以下列出给大家参考

CV_BGR2GRAY          变成了           COLOR_BGR2GRAY

CV_8UC3                    没变                有人说CV全变成了COLOR我就全部替换了,仍然出错,坑人

CV_RETR_CCOMP                  变成了                      RETR_CCOMP

CV_CHAIN_APPROX_SIMPLE                  变成了                 CHAIN_APPROX_SIMPLE

CV_AA           变成了                 LINE_AA

其他应该还有,我没遇到而已。建议大家直接找源码自带的例程,跑不起来也可以看看上面的定义,不然只能去查手册了,网上的教程时效太差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值