Ubuntu16.04卸载opencv 3.0.0,安装opencv3.4.2 + contrib

一、卸载 opencv3.0.0

1、查看已安装的 opencv 版本

pkg-config --modversion opencv

2、卸载

     找到当初安装 opencv3.0.0 的 build 目录,进入 build 目录

cd /home/***/opencv/build
sudo make uninstall
cd  ..
sudo rm -r build

在我的电脑中,不加 sudo 无法完全移除,于是自己做了一点改动( 将教程中的 rm -r build 改成了 sudo rm -r build) 

如果找不到 build 目录,可以重新建立 build 目录安装对应版本,再执行卸载步骤。

然后清理 /usr 中所有 opencv 相关项 

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*
cd /usr
find . -name "*opencv*" | xargs sudo rm -rf

cd /home/***
chmod a+x /home/***/opencv
rm -r /home/***/opencv

移除 python 相关(我没有成功,就直接跳过这一步了)

apt-get remove-doc opencv-data python-opencv

二、安装 opencv3.4.2 + opencv contrib

1、下载 opencv3.4.2  以及 opencv contrib3.4.2

2、安装依赖项

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

3. 将下载好的 opencv3.4.2 文件解压,我复制到了 home 目录下,重命名为 opencv

如果要同时安装 opencv_contrib,将 opencv_contrib3.4.2 文件提取,复制到 opencv 目录下一个名为 opencv_contrib 的文件夹中,在 opencv 目录下新建一个文件夹build,进入build目录,执行 cmake 生成 makefile 文件 

cd ~/opencv/build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules/ ..

如果不安装 opencv_contrib ,则第二步命令改为:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local

其中,

/usr/local 是指默认将要 install 的路径

 OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules/ .. 是指 opencv_contrib3.4.2 中 modules所在的路径,后面的两点不可省略

3、安装

sudo make
sudo make install

4、查看新版本,已经变成3.4.2了

三、教程里一个KCF跟踪的小例程, 验证自己的opencv和opencv_contrib是否安装成功 

1、在自己想要的任何位置新建一个用于放例程文件夹:kcf_demo

2、新建一个简单的main.cpp文件

 这里需要我改动了两个地方,不然运行会报错:

VideoCapture cap(1); 中的1改成 0

Ptr<Tracker> tracker = Tracker::create("KCF");  改成 Ptr<Tracker> tracker = TrackerKCF::create();  

#include <opencv2/core/utility.hpp>
#include <opencv2/tracking.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <cstring> 
 
using namespace std;
using namespace cv;
 
int main() {  
    // declares all required variables  
    //! [vars]  
    Rect2d roi;  
    Mat frame;  
    //! [vars]  
  
    // create a tracker object  
    Ptr<Tracker> tracker = TrackerKCF::create();  
    //! [create]  
  
    // set input video  
    //! [setvideo]
    //std::string video = "/home/***/kcfDemo/demo1/test.mkv";  
    //VideoCapture cap(video);
    VideoCapture cap(0);
    //! [setvideo]
  
    // get bounding box  
    //! [getframe]  
    cap >> frame;  
    //! [getframe]  
    //! [selectroi]选择目标roi以GUI的形式
    if(!frame.empty()){
        roi=selectROI("tracker",frame);
    }  
    //! [selectroi]  
  
    //quit if ROI was not selected  
    if (roi.width == 0 || roi.height == 0)  
        return 0;  
  
    // initialize the tracker  
    //! [init]  
    tracker->init(frame, roi);  
    //! [init]  
  
    // perform the tracking process  
    printf("Start the tracking process\n");  
    for (;; ) {  
        // get frame from the video  
        cap >> frame;  
        // stop the program if no more images  
        if (frame.rows == 0 || frame.cols == 0)  
            break;  
  
        // update the tracking result  
        //! [update]  
        tracker->update(frame, roi);  
        //! [update]  
  
        //! [visualization]  
        // draw the tracked object  
        rectangle(frame, roi, Scalar(255, 0, 0), 2, 1);  
  
        // show image with the tracked object
        if(!frame.empty()){
            imshow("tracker",frame);
	}  
        //! [visualization]  
        //quit on ESC button  
        if (waitKey(1) == 27)  
            break;  
    }  
  
    return 0;  
}

不作实时跟踪,而需要用视频文件时,把  VideoCapture cap(0); 注释掉,取消  VideoCapture cap(video); 的注释即可,亲测 avi,mkv,mp4格式均可

3、在main.cpp同一文件夹下创建一个CMakeLists.txt文件

cmake_minimum_required(VERSION 3.0)
PROJECT(kfcDemo1)
SET(SRC_LIST main.cpp)
find_package(OpenCV 3.4 REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
ADD_EXECUTABLE(demo1 ${SRC_LIST})
target_link_libraries(demo1 ${OpenCV_LIBS})

其中,

find_package(OpenCV 3.4 REQUIRED)是搜索opencv 3.4 的包

include_directories(${OpenCV_INCLUDE_DIRS})是定义opencv的包含目录所在的位置

target_link_libraries(demo1 ${OpenCV_LIBS})是链接opencv的库

4、编译

mkdir build
cd build
cmake ..
make

得到了一个小程序demo1,可以直接调用看看效果:

./demo1

四、参考:

Ubuntu16.04卸载其他版本的opencv并安装opencv3.2.0+opencv contrib3.2.0

Ubuntu16.04 上openCV的卸载与 opencv3.0.2安装记录

猜你喜欢

转载自blog.csdn.net/haoqimao_hard/article/details/82049565