linux c++ opencv4安装指南

python的opencv安装很简单,通过pip就可以完成,但是c++在安装opencv4的时候需要注意一些。下面给出linux下安装opencv4的步骤。
1.安装依赖

sudo apt-get install cmake  
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev

2.下载源文件
推荐直接去https://github.com/opencv/opencv下载,如果git clone网速太慢的话,也可以在网页上下载,然后直接解压。

git clone https://github.com/opencv/opencv

3.编译安装
第二步完成,我们应该下载的是目前最高版本opencv4.5.1,解压后进入opencv文件下,建立build文件夹

mkdir build
cd build

完成后,应该看到路径下多出build文件夹
在这里插入图片描述
然后配置cmake

sudo cmake -DCMAKE_BUILD_TYPE=Release \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local ..

注意…不能省略,-DOPENCV_GENERATE_PKGCONFIG=ON是为了在/usr/loacl/lib/pkgconfig/目录下自动生成opencv4.pc文件。
camke配置完后开始make

sudo make -j4

-j4是根据为了提高编译速度

sudo make install

完成编译安装。

4.环境配置
安装完成后还需要进行环境配置,先将OpenCV的库添加到路径,从而可以让系统找到

sudo vim /etc/ld.so.conf.d/opencv4.conf

在里面添加一行

/usr/local/lib

保存后返回终端界面,然后输入以下代码时刚刚的路径配置生效

sudo ldconfig

接下来配置bash

sudo vim /etc/bash.bashrc

在文件的最后加入

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH

保存并返回终端界面后执行以下命令,使配置生效

source /etc/bash.bashrc

最后,运行以下命令更新一下数据库文件

sudo updatedb  

5.实例验证
新建一个cpp文件my.cpp,将opencv.hpp头文件写进去
linux c++ opencv4安装指南_第1张图片
在终端输入

sudo  g++ -g -Wall -std=c++11 my.cpp -o my `pkg-config --cflags --libs opencv4`

因为linux是x86-64编译环境所以这里是g++ -g -Wall -std=c++11,生成my的执行文件

./my

在这里插入图片描述
验证成功。

或者验证opencv中的实例。
进入opencv/samples/cpp/eaxmple_cmake目录下,尝试make一下,发现报错如下

g++ example.cpp -o example.o -c -Wall -I/usr/local/include/opencv4/opencv2 
example.cpp:1:28: fatal error: opencv2/core.hpp: 没有那个文件或目录
compilation terminated.
Makefile:11: recipe for target 'example.o' failed
make: *** [example.o] Error 1

意思是说找不到opencv2/core.hpp这个头文件。而我们到/usr/local/include/opencv4/opencv2下,发现明明有这个头文件啊?问题就出在例程的Makefile里,打开Makefile看一看

 CXX ?= g++
 
 CXXFLAGS += -c -Wall $(shell pkg-config --cflags opencv)
 LDFLAGS += $(shell pkg-config --libs --static opencv)
 
 all: opencv_example
 
 opencv_example: example.o; $(CXX) $< -o $@ $(LDFLAGS)
 
 %.o: %.cpp; $(CXX) $< -o $@ $(CXXFLAGS)
 
 clean: ; rm -f example.o opencv_example

问题找到了,第3、4行中显然是在pkgconfig中调用opencv,而我们的opencv4是在/usr/local/lib/pkgconfig/目录下自动生成的opencv4.pc,那么只需要把这两行的opencv改为opencv4就ok了。修改后保存,然后再make一下,这次不报找不到头文件的错了,但是出来了一堆其他的错误。拿出错误的前几行看一下。

g++ example.cpp -o example.o -c -Wall -I/usr/local/include/opencv4/opencv -I/usr/local/include/opencv4 
In file included from /usr/local/include/opencv4/opencv2/core.hpp:52:0,
                 from example.cpp:1:
/usr/local/include/opencv4/opencv2/core/cvdef.h:716:4: error: #error "OpenCV 4.x+ requires enabled C++11 support"
 #  error "OpenCV 4.x+ requires enabled C++11 support"
    ^
In file included from /usr/include/c++/5/array:35:0,
                 from /usr/local/include/opencv4/opencv2/core/cvdef.h:722,
                 from /usr/local/include/opencv4/opencv2/core.hpp:52,
                 from example.cpp:1:

可以发现,其意思是说opencv4需要c++11支持,而我们的makefile中并没有使用c++11去编译 ,所以解决办法就是在Makefiile中指定用c++11标准编译。再次打开Makefile,在第3行下加入CXXFLAGS += -std=c++11,最终的makefile如下所示

CXX ?= g++
 
CXXFLAGS += -c -Wall $(shell pkg-config --cflags opencv4)
CXXFLAGS += -std=c++11
LDFLAGS += $(shell pkg-config --libs --static opencv4)
 
all: opencv_example

opencv_example: example.o; $(CXX) $< -o $@ $(LDFLAGS)
 
%.o: %.cpp; $(CXX) $< -o $@ $(CXXFLAGS)
 
clean: ; rm -f example.o opencv_example

再次make,就可以运行example。

你可能感兴趣的:(环境,c++,c++,linux,opencv,ubuntu)