我的电脑系统是Windows10,但现在需要在Ubuntu上安装OpenCV,所以首先要在Windows10上装个linux子系统。
Windows Subsystem for Linux(简称WSL)是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。参考资料[1][2],在安装任何 Linux 发行版本之前,必须确保启用 Windows Subsystem for Linux
可选功能。
按下 “Windows + X”,选择 Windows PowerShell
(管理员),输入以下命令,出现提示后重启计算机
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
打开 Microsoft Store 搜索Ubuntu,选择Ubuntu 16.04 LTS(一开始我选了18.04,在后续编译OpenCV时出了问题,所以这里建议选16.04稳妥一点),获取并安装。
安装完成后可以在【开始】菜单的【最近添加】中找到 Ubuntu,或者在Cortana的搜索框中搜索,点击启动。第一次打开 Ubuntu 时,会提示创建新的用户账户和密码。
ubuntu Linux子系统的目录是在这个目录下
C:\Users\admin\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
windows的磁盘被挂载到了/mnt下,可以直接访问
先更新下(避免下载安装过程中出现链接找不到404等错误),然后把g++装了
sudo apt-get update
sudo apt-get upgrade
apt-get install g++
添加OpenCV所需的环境和依赖库:
这两行是必选的
$ 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 python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
从github中下载下OpenCV + OpenCV_Contrib的源码,记得选对版本,这里我下载的是3.4.5版本的
https://github.com/opencv/opencv/releases/tag/3.4.5
https://github.com/opencv/opencv_contrib/tree/3.4.5
在windows上先解压opencv,然后再解压opencv_contrib,将解压得到的opencv_contrib移到opencv文件夹里,在Ubuntu里用命令把opencv文件夹拷贝到/home/目录下,如果遇到权限问题,就使用 sudo chmod -R 777 文件夹
cp -rf /mnt/c/workspace/* /home/
进入opencv目录,创建build目录后,进入build目录
mkdir build
开始用cmake编译,编译结果显示如下图
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..
如果配置要编译python 的话,先装下numpy,pip3 install numpy -i https://pypi.doubanio.com/simple/,跟python相关的路径设置,参考ubuntu简易配置python3的opencv
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D BUILD_opencv_python3=ON -D INSTALL_PYTHON_EXAMPLES=ON -D PYTHON3_INCLUDE_DIR=/usr/include/python3.5m -D PYTHON_NUMPY_PATH=/usr/local/lib/python3.5/dist-packages -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3.5 -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..
接下来执行以下命令,[100%]通过就OK了(-j8是因为电脑CPU是8核)
make -j8
执行下面那句命令完成安装,完成后就可以在/usr/local/lib下看见opencv编译的结果
sudo make install
编辑配置文件,修改两个文件/etc/ld.so.conf和/etc/bash.bashrc,最后source一下,使修改立即生效
$ sudo vim /etc/ld.so.conf
在下面加上这行/usr/local/lib
$ sudo ldconfig
$ sudo vim /etc/bash.bashrc
在末尾添加下面两行
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
$ source /etc/bash.bashrc
在/home/lzr/code/下面写一个测试程序test_opencv.cpp,如下:
#include
int main()
{
std::string imageName = "test.jpg";
cv::Mat testImage = cv::imread(imageName,0);
cv::imwrite("result.jpg",testImage);
return 0;
}
编译
g++ test_opencv.cpp `pkg-config --libs --cflags opencv` -o test_opencv
运行
./test_opencv
查看下生成的result.jpg如果是灰度图就是正常运行了。
使用Makefile,sudo vim Makefile,内容如下(注意g++前面用TAB键,而不是空格*4,否则make会报错makefile:2: *** missing separator. Stop. make),然后make,最后./test_opencv也能正常运行。
test_opencv: test_opencv.cpp
g++ -o ${@} $< `pkg-config opencv --cflags --libs `
若是编库,可以用如下模板
TARGET := libTest.so
#compile and lib parameter
CC := g++
LIBS := `pkg-config --libs --cflags opencv`
SHARE := -fPIC -shared -o
#source file
SOURCE := $(wildcard *.c) $(wildcard *.cpp)
.PHONY : everything objs clean veryclean rebuild
everything : $(TARGET)
all : $(TARGET)
rebuild: veryclean everything
clean :
rm -fr *.o
veryclean : clean
rm -fr $(TARGET)
$(TARGET) :
$(CC) $(SHARE) $@ $(SOURCE) $(LIBS)
在CentOS7上配置opencv3.4.5的流程跟上面的差不多,只不过是把命令修改下,换成apt-get install 换成 yum install,例如安装g++时sudo yum -y install gcc-c++,如果解压opencv源码时遇到unzip: command not found,就sudo yum -y install unzip zip;gtk 图形化界面库其实可以不装。
# 配置好epel源
yum -y install epel-release
# gcc一般时有的,通常需要安装g++
sudo yum -y install gcc-c++
# 安装cmake
sudo yum install cmake
#下载opencv和opencv_contrib
wget https://github.com/opencv/opencv/archive/3.4.5.zip
wget https://github.com/opencv/opencv_contrib/archive/3.4.5.zip
#解压后,在opencv—3.4.5下面新建文件夹build和opencv_contrib,把opencv_contirb-3.4.5里的内容拷贝到opencv—3.4.5/opencv_contrib里
# 进入bulid文件夹准备编译
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..
make
sudo make install
添加路径时改的是/etc/bashrc ,库目录是/usr/local/lib64,如下:
$ sudo vim /etc/ld.so.conf
在下面加上这行/usr/local/lib64
$ sudo ldconfig
$ sudo vim /etc/bashrc
在末尾添加下面两行
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig
export PKG_CONFIG_PATH
$ source /etc/bashrc
可能遇到的错误:
Cannot find a valid baseurl for repo: base/7/x86_6
1、打开 vi /etc/sysconfig/network-scripts/ifcfg-eth0(每个机子都可能不一样,但格式会是“ifcfg-eth数字”),把ONBOOT=no,改为ONBOOT=yes
2、重启网络:service network restart
linux虚拟机安装完毕之后,ifconfig命令提示command not found,只需要执行:yum install net-tools 即可
补充:
错误提示:sift = cv2.xfeatures2d.SIFT_create()
解决方案:之前安装的版本太新,申请了算法专利保护,SIFT等已经不能够使用。
先卸载原先安装的库:pip uninstall opencv-contrib-python,
然后pip install opencv-contrib-python==3.4.2.16 或者(3.4.2.17, 3.4.3.18, 3.4.4.19, 3.4.5.20)
我安装的是3.4.2.16,成功运行。
————————————————
版权声明:本文为CSDN博主「qq_41962154」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41962154/article/details/88948948
参考资料
[1] Windows Subsystem for Linux Installation Guide for Windows 10
[2] Windows 10 安装 Linux 子系统(Windows Subsystem for Linux)
[3] windows10 Linux子系统文件目录
[4] OpenCV官方教程:Installation in Linux
[5] OpenCV - Linux(Ubuntu 16.04)中安装OpenCV + OpenCV_Contrib
[6] OpenCV学习一《Linux下安装OpenCV》
[7] Ubuntu16.04安装配置opencv3.4.3+opencv_contrib3.4.3
[8] Linux环境下OpenCV的安装
[9] centos7.4 opencv3.4安装
[10] centos7下opencv3.4.1 的安装和编译全解
[11] OpenCV官方配置选项
[12] https://github.com/opencv/opencv/wiki/CPU-optimizations-build-options