一、卸载 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
#include
#include
#include
#include
#include
#include
using namespace std;
using namespace cv;
int main() {
// declares all required variables
//! [vars]
Rect2d roi;
Mat frame;
//! [vars]
// create a tracker object
Ptr 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安装记录