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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章