Opencv3安装踩坑(SLAM十四讲)

因为之前玩ros,使用了sudo apt-get install libopencv-dev 安装了opencv2,而slam十四讲的opencv版本为3。
因此需要重新安装opencv3(在与opencv2共存的条件下,因为以后还想玩ros呢)
首先检查已有的opencv版本:

pkg-config opencv --modversion

如果是2版本,则需要安装3版本

1. 安装过程

1.安装依赖(如果有依赖则不必重新安装,检查依赖是否存在用locate+名称)

sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev

libtiff4-dev可能会报错,改为libtiff5-dev可以安装
但是由于我之前玩ros都安装过依赖,因此没进行这一步

  1. 下载opecv包,并提取到某位置
    下载路径:https://codeload.github.com/opencv/opencv/zip/3.2.0
    然后进入解压后的文件夹,在终端打开
    接下来在命令行输入:
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3 ..
make -j4
sudo make install

值得注意的是,cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3 …
这里一定要指定安装路径,注意这里与官网不一样!按照我的来

注意,安装过程中可能会出现一个包ippicv下载过慢,则中断安装后,自己下载:
https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv/ippicv_linux_20151201.tgz
(如果还是慢请用win下的迅雷下载)
然后将下载下来的ippicv_linux_20151201.tgz
放入opencv3(让你指定的下载路径嘛)下面的:
3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e里即可。

然后重新继续安装

最后opencv3就被完整地安装在usr/local下面的个opencv3文件夹

2. 测试过程

1.首先查看版本

pkg-config opencv --modversion

在这里插入图片描述
2.测试代码

首先在CMakeList.txt中加入:
要注意的有
(1)C++11支持
(2)set(OpenCV_DIR “usr/local/opencv3/share/OpenCV”) 设置寻找路径

set( CMAKE_CXX_FLAGS "-std=c++11")

cmake_minimum_required( VERSION 2.8 )
project( imageBasics )

set(OpenCV_DIR "usr/local/opencv3/share/OpenCV")

# 寻找OpenCV库
find_package( OpenCV REQUIRED )
# 添加头文件
include_directories( ${OpenCV_INCLUDE_DIRS} )
# 可执行程序
add_executable( imageBasics imageBasics.cpp )
# 链接OpenCV库
target_link_libraries( imageBasics ${OpenCV_LIBS} )

3.附录(测试代码)

#include <iostream>
#include <chrono>

using namespace std;

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

int main(int argc, char **argv) {
  // 读取argv[1]指定的图像
  cv::Mat image;
  image = cv::imread(argv[1]); //cv::imread函数读取指定路径下的图像

  // 判断图像文件是否正确读取
  if (image.data == nullptr) { //数据不存在,可能是文件不存在
    cerr << "文件" << argv[1] << "不存在." << endl;
    return 0;
  }

  // 文件顺利读取, 首先输出一些基本信息
  cout << "图像宽为" << image.cols << ",高为" << image.rows << ",通道数为" << image.channels() << endl;
  cv::imshow("image", image);      // 用cv::imshow显示图像
  cv::waitKey(0);                  // 暂停程序,等待一个按键输入

  // 判断image的类型
  if (image.type() != CV_8UC1 && image.type() != CV_8UC3) {
    // 图像类型不符合要求
    cout << "请输入一张彩色图或灰度图." << endl;
    return 0;
  }

  // 遍历图像, 请注意以下遍历方式亦可使用于随机像素访问
  // 使用 std::chrono 来给算法计时
  chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
  for (size_t y = 0; y < image.rows; y++) {
    // 用cv::Mat::ptr获得图像的行指针
    unsigned char *row_ptr = image.ptr<unsigned char>(y);  // row_ptr是第y行的头指针
    for (size_t x = 0; x < image.cols; x++) {
      // 访问位于 x,y 处的像素
      unsigned char *data_ptr = &row_ptr[x * image.channels()]; // data_ptr 指向待访问的像素数据
      // 输出该像素的每个通道,如果是灰度图就只有一个通道
      for (int c = 0; c != image.channels(); c++) {
        unsigned char data = data_ptr[c]; // data为I(x,y)第c个通道的值
      }
    }
  }
  chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
  chrono::duration<double> time_used = chrono::duration_cast < chrono::duration < double >> (t2 - t1);
  cout << "遍历图像用时:" << time_used.count() << " 秒。" << endl;

  // 关于 cv::Mat 的拷贝
  // 直接赋值并不会拷贝数据
  cv::Mat image_another = image;
  // 修改 image_another 会导致 image 发生变化
  image_another(cv::Rect(0, 0, 100, 100)).setTo(0); // 将左上角100*100的块置零
  cv::imshow("image", image);
  cv::waitKey(0);

  // 使用clone函数来拷贝数据
  cv::Mat image_clone = image.clone();
  image_clone(cv::Rect(0, 0, 100, 100)).setTo(255);
  cv::imshow("image", image);
  cv::imshow("image_clone", image_clone);
  cv::waitKey(0);

  // 对于图像还有很多基本的操作,如剪切,旋转,缩放等,限于篇幅就不一一介绍了,请参看OpenCV官方文档查询每个函数的调用方法.
  cv::destroyAllWindows();
  return 0;
}

如果想在Kdevelop中使用,则需要在配置启动器中输入参数
在这里插入图片描述

最终成功打开图片:ubuntu.png

4. 补充

为了能够验证ros的opencv还能用,因此:
注意必须先sudo apt-get update 一下

sudo apt-get update 
roslaunch robot_vision usb_cam.launch 
roslaunch robot_vision face_detector.launch 
rqt_image_view
发布了103 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44684139/article/details/104837210