Ubuntu 16.04 + OpenCV3.4.1+Python3.5 编译安装及测试代码

1. 安装依赖包

$ 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
$ sudo apt-get install python3-dev python3-scipy python3-numpy  python3-pandas python3-matplotlib python3-sklearn

2. 下载代码

$ mkdir opencv_tools; cd opencv_tools
$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git
$ cp -r opencv_contrib opencv

3. 编译

$ mkdir release; cd release
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D PYTHON3_EXECUTABLE=/usr/bin/python3 \
-D PYTHON_INCLUDE_DIR=/usr/include/python3.5 \
-D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/dist-packages/numpy/core/include \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-D PYTHON_EXECUTABLE=/usr/lib/python3 \
-D BUILD_opencv_xfeatures2d=OFF \
-D BUILD_EXAMPLES=ON ..
$ make -j6

或者

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/tools/opencv4.2.0 \
-D PYTHON3_EXECUTABLE=/usr/bin/python3 \
-D PYTHON_INCLUDE_DIR=/usr/include/python3.5 \
-D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/dist-packages/numpy/core/include \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-D PYTHON_EXECUTABLE=/usr/lib/python3 \
-D BUILD_opencv_xfeatures2d=OFF \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_OPENGL=ON \
-D WITH_VTK=ON \
-D WITH_IPP=OFF \
-D BUILD_LIBPROTOBUF_FROM_SOURCES=ON \
-D BUILD_EXAMPLES=ON ..
  • 以PYTHON开始宏对应的路径与whereis python3输出的路径保持一致
$ whereis python3

4. 安装配置

$ sudo make install   # 安装
$ sudo make uninstall # 卸载
$ sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'   # 添加库路径
$ sudo ldconfig  # 更新系统库
  • 在/etc/bash.bashrc 末尾增加以下内容:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  
  • 再执行以下命令
$ sudo source /etc/bash.bashrc
$ sudo updatedb   #激活配置然后更新database
  • 查看OpenCV安装版本
pkg-config --modversion opencv
  • 查看OpenCV安装库
pkg-config opencv --libs

4.1 多版本OpenCV切换

  • 打开~/.bashrc
vim ~/.bashrc
  • 在文件末尾增加以下内容
export PKG_CONFIG_PATH=/usr/tools/opencv4.2.0/build/installed/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/tools/opencv4.2.0/build/installed/lib
  • 更新~/.bashrc
$ source ~/.bashrc 
  • 查询OpenCV版本
$ pkg-config --modversion opencv

5. C++代码测试

  • src/test.cpp
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{

    if ( argc != 2 )
    {
        cout << "Need to load a picture..." << endl;
        return -1;
    }
    Mat image;
    image = imread( argv[1], 1 );
    if ( image.empty() )
    {
        cout<<"No image data!"<< endl;
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);
    waitKey(0);
    return 0;
}

  • CMakeLists.txt
# project name
PROJECT(opencv_test)

# requirement of cmake version
cmake_minimum_required(VERSION 3.5)

# set the directory of executable files
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${opencv_test_SOURCE_DIR}/build/bin)

# find required opencv
find_package(OpenCV REQUIRED)

# directory of opencv headers
include_directories(${OpenCV_INCLUDE_DIRS})

# name of executable file and path of source file
add_executable(opencv_test src/test.cpp)

# directory of opencv library
link_directories(${OpenCV_LIBRARY_DIRS})

# opencv libraries
target_link_libraries(opencv_test ${OpenCV_LIBS} )
  • 编译运行
$ mkdir build; cd build;
$ cmake ..
$ make
$ ./test ../1.jpg

5. Python代码测试

  • test.py
import numpy as np
from matplotlib import pyplot as plt
import cv2
print ('OpenCV Version:' + cv2.__version__)

# cv2.IMREAD_COLOR:加载一个彩色图片。图片的透明度会被忽略,这个是默认标志,BGR模式
# cv2.IMREAD_GRAYSCALE:用灰度模式加载图片
# cv2.IMREAD_UNCHANGED:包含alpha通道的方式加载图片
# Load an color image in grayscale
img = cv2.imread('1.jpg', cv2.IMREAD_COLOR)
emptyImage = np.zeros(img.shape, np.uint8)
emptyImage2 = img.copy()
emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

cv2.imshow("EmptyImage", emptyImage)
cv2.imshow("Image", img)
cv2.imshow("EmptyImage2", emptyImage2)
cv2.imshow("EmptyImage3", emptyImage3)
cv2.imwrite("./cat2.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 5])
cv2.imwrite("./cat3.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

cv2.waitKey (0)
cv2.destroyAllWindows()

# k = cv2.waitKey(0)
# print('k=' + str(k));
# if k == 27:                 # wait for ESC key to exit
#     cv2.destroyAllWindows()
# elif k == ord('s'):        # wait for 's' key to save and exit
#     cv2.imwrite('messigray.png', img)
#     cv2.destroyAllWindows()

  • 测试
$ python3 test.py

6. Ubuntu修复损坏的软件包

  • 修复损坏的软件包,尝试卸载出错的包,重新安装正确版本的
sudo apt-get -f install

参考

  • https://docs.opencv.org/trunk/d7/d9f/tutorial_linux_install.html
  • https://blog.csdn.net/Int93/article/details/79056179
  • https://www.cnblogs.com/Shuqing-cxw/p/9195303.html
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值