安装这个opencv c++版是遇到了各种各样奇怪的坑
编译过程超级长,第一次编译的时候看的很心慌,还好没有遇到编译问题,比较顺利
但是初次使用过程中,各种奇怪的坑就出现了,
仅仅是最简单的读取一张图片,显示出来,就有各种各样奇怪的问题
打开这个链接
https://opencv.org/releases
选择最新版,或者根据需要选择版本,点击sources进行下载,如果你下载的比较慢的话,可以使用以下链接进行下载(打不开的话,可以把lanzouw改成lanzoux)
https://lyyqaq.lanzouw.com/ihwWA00tttgj
首先,需要cmake以及make
sudo apt install cmake make
建议直接复制
sudo apt-get install build-essential pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
unzip opencv-4.5.5.zip
cd opencv-4.5.5
mkdir build
cd build
下面这行一定要全部复制
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_GTK=ON -D OPENCV_GENERATE_PKGCONFIG=YES ..
CMAKE_BUILD_TYPE=RELEASE
:表示编译发布版本
CMAKE_INSTALL_PREFIX
:表示生成动态库的安装路径,可以自定义
WITH_GTK=ON
:这个配置是为了防止GTK配置失败:即安装了libgtk2.0-dev依赖,还是报错未安装
OPENCV_GENERATE_PKGCONFIG=YES
:表示自动生成OpenCV的pkgconfig文件,否则需要自己手动生成。
。
make -j4
数字4是表示用4个系统内核编译,根据配置不同,可能要等待十几分钟到半小时
sudo make install
sudo vim /etc/ld.so.conf
在打开的文件末尾,增加一行include /usr/loacal/lib
最后
sudo ldconfig
即可
注意,针对使用WSL构建,到这一步时,会报错
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link
解决办法见问题四
sudo vim /etc/bash.bashrc
在末尾添加下面两行
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出,再source一下
source /etc/bash.bashrc
打开clion创建一个工程,将opencv页面的图标保存下来,放到工程目录下
#include
#include
using namespace std;
using namespace cv;
int main() {
Mat img = imread("../opencv.png");
imshow("Image", img);
waitKey(0);
return 0;
}
点开外部库的include文件夹,可以看到opencv4文件夹,并且opencv2文件夹在opencv4下面
此时可以给opencv2文件夹手动创建一个软链接
cd /usr/local/include/
sudo ln -s opencv4/opencv2 opencv2
重新回到clion,可以看到问题解决
如下图
可以看到报错信息中提示,在链接时出错,这是因为找不到opencv的库
此时需要修改CMakeLists.txt
在set(CMAKE_CXX_STANDARD xxx)
和add_executable(xxx main.cpp)
中间添加
find_package(OpenCV REQUIRED)
message(STATUS "OpenCV library status:")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " libraries: ${OpenCV_LIBS}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
if(CMAKE_VERSION VERSION_LESS "2.8.11")
# Add OpenCV headers location to your include paths
include_directories(${OpenCV_INCLUDE_DIRS})
endif()
在最末尾添加
target_link_libraries(test0001 ${OpenCV_LIBS})
刷新cmake
如果有多个版本的opencv,则需要在上方指定版本
修改find_package(OpenCV REQUIRED)
为find_package(OpenCV x.x.x REQUIRED)
,中间的为版本号
例如find_package(OpenCV 4.5.5 REQUIRED)
此时再运行代码,成功运行
执行以下命令即可
sudo apt-get install appmenu-gtk2-module appmenu-gtk3-module
sudo ldconfig
时,报错/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link
常规方法是删除掉两个出问题的文件再创建软连接,但此时你会发现没有权限删除,我在参考链接4的博客中,找到了解决方案
以管理员权限,打开一个Windows Terminal窗口,然后输入以下指令,不要全部复制,一条一条输入。
wsl -e /bin/bash
cd /mnt/c/Windows/System32/lxss/lib
rm -r libcuda.so.1
rm -r libcuda.so
ln -s libcuda.so.1.1 libcuda.so.1
ln -s libcuda.so.1.1 libcuda.so
如果没有权限的话,前面加上sudo就可以了。
再尝试sudo ldconfig
即可解决
Ubuntu 18.04安装配置OpenCV 4.4.0
Linux 下 fatal error: opencv2/opencv.hpp: 没有那个文件或目录
Cannot get OpenCV to compile because of undefined references?
WSL2 + Dockerのメモ