写在前面
- 我用的是cmake方式编译安装的opencv,但一直弄不好contrib这个东西,索性先不用
- 老版本的opencv我把源文件都删掉了,没法用网上的一些方法make uninstall
卸载清除旧版本
- 步骤一(如果还保留了编译的源文件,进入build文件夹)
sudo make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*```
- 步骤二(卸载/usr中的OpenCV相关内容)
cd /usr/
find . -name "*opencv*" | xargs sudo rm -rf
如果你已经把opencv文件删掉了,那么直接从这里开始即可
- 验证是否成功卸载
pkg-config opencv --libs
pkg-config opencv --modversion
如果什么都没有就表示成功
重新安装新版opencv
利用cmake编译安装(C/C++)
- 下载基本需要的包文件
sudo apt install build-essential
sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
这里如果出了问题(无法定位软件包libjasper-dev 的错误提示),按下面的代码执行
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt upgrade
sudo apt install libjasper1 libjasper-dev
- 从Opencv官网下载你需要的版本的source源码到windows下,再移动到wsl下
以下是一些提高效率的操作!
如何流畅的在wsl和windows下移动文件?
答:windows下在文件浏览器地址栏输入\\wsl$
为了更方便?如何在Vscode中访问wsl?
专业同志们都应该知道Vscode,强烈建议使用
在Vscode的插件市场安装下图中的这个插件
按照下图指示,你将打开WSL的新世界!!!
回归正题:将下载的source源码导入wsl中任意文件夹后
- 进入解压出来的文件夹(举例:OpenCV-4.1.0)中,创建一个新文件夹,我创建的叫 build
cd OpenCV-4.1.0
mkdir build
cd build
- 接着执行以下命令设置参数
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
如果报错,那么去掉 -D后面的空格再尝试一下,即
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
这之中 , /usr/local 是 OpenCV 的安装路径
- 开始编译
sudo make
或者使用多线程进行编译
sudo make -j8
8指的是线程数,和CPU内核数目有关
-
等待编译结束
-
编译结束后输入安装命令
sudo make install
环境配置
- 打开opencv.conf文件(利用Vscode可直接打开所有文件,爽)
目录为 /etc/ld.so.conf.d/opencv.conf
在文末添加:/usr/local/lib
执行sudo ldconfig
使其生效
- 打开.bashrc 文件
目录为 /etc/bash.bashrc
文末添加两行
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
执行source /etc/bash.bashrc
使其生效
配置到这里结束
But,肯定会有很多问题和坑的了。
- 可能遇到的坑
- 第一个坑
/etc/bash.bashrc:11: command not found: shopt
这主要是因为你的终端不是bash的原因
查看终端版本
echo $SHELL
/usr/bin/zsh
那就去.zshrc文件里面添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
然后source /home/username/.zshrc
使其生效
username 是你自己的用户名
- 第二个坑
No package ‘opencv’ found
当我们输入以下命令查看是否安装好的时候
pkg-config opencv --modversion
却遇到下面这个错误
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
缺少opencv.pc文件
cd /usr/local/lib
sudo mkdir pkgconfig && cd pkgconfig
修改目录下的opencv.pc文件,没有就自己新建一个
prefix=/usr/local
exec_prefix=${prefix}
includedir=/usr/local/include
libdir=/usr/local/lib
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.1.0(改成自己的版本号)
Libs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}
- 最后大功告成了,进入测试环节
测试C++代码
main.cpp的内容
#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv4/opencv2/core.hpp>
using namespace std;
using namespace cv;
int main(){
Mat img=imread("/home/yuque/Code/openmv/DisplayImage/test.png");
imshow("test",img);
waitKey(0);
return 0;
}
CmakeLists.txt中的内容
# cmake needs this line
cmake_minimum_required(VERSION 3.1)
# Define project name
project(opencv_example_project)
# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)
# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS " config: ${OpenCV_DIR}")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " libraries: ${OpenCV_LIBS}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
# Declare the executable target built from your sources
add_executable(opencv_example main.cpp)
# Link your application with OpenCV libraries
target_link_libraries(opencv_example PRIVATE ${OpenCV_LIBS})
- 将上面两个文件放入一个文件夹中,如test
- 放入一张图片在test文件夹中,main.cpp中imread那里记得改图片路径
- 进入test文件夹中
- 输入如下命令
mkdir build
cd build
cmake .
make
./opencv_example
如果显示了图片则成功
当然是不会成功的,因为还要安装一款软件
在windows下安装下图软件,然后它的配置去网上找
知乎VrXsrv
- 在windows下的配置
- 在Linux下的配置:
在.bashrc或者.zshrc文件中加上这一行
export DISPLAY=`cat /etc/resolv.conf | grep nameserver | awk '{print $2}'`:0
最后再运行一下./opencv_example
就可以愉快的看到图片了!!!
Anaconda环境下的opencv
bash一行代码搞定
pip install opencv-python -i https://pypi.douban.com/simple
可以输入以下命令验证
python
import cv2
print(cv2.__version__)
出现版本号就成功
结语
花了好多时间研究这个环境配置,希望能帮助到有需要的人。