RobotVision勉強会:1回目 画像の読込・表示・保存

この記事は私が主催しているRobotVision勉強会の内容メモです。OpenCVの内容については下のサイトやOpenCV3.2.0のドキュメントを参考にしています。なお、開発環境はUbuntu16.04、OpenCV3.2.0です。

  •  http://opencvexamples.blogspot.com/p/learning-opencv-functions-step-by-step.html

初回なので開発環境のインストールと画像ファイルの読み込み、保存、表示について紹介します。

1.開発環境のインストール

2.ステップ

  • (1). 画像を imread()で読み込む。
  • (2). namedWindow()とimshow()を使いウインドウに表示する。
  • (3). 必要があればimwrite()で画像をファイルに保存する。
  • (4). キーボードのキーが押されるまで waitKey()で待つ。

3.画像の読み込み、表示、保存等のAPI

  • Mat imread(const String& filename, int flags=IMREAD_COLOR )
    • 機能:画像ファイルを読み込む
    • 引数:
      filename – 読み込まれるファイル名
      flags –読み込まれる画像のカラータイプを指定

      • CV_LOAD_IMAGE_ANYDEPTH – 入力された色深度が16ビット/32ビットならその画像を返す。それ以外は色深度を8ビットに変換して返す。
      • CV_LOAD_IMAGE_COLOR – カラー画像
      • CV_LOAD_IMAGE_GRAYSCALE – グレースケール
      • >0:3チャンネルのカラー画像を返す。αチャンネルが必要なら負の値を使うこと。
      • =0:グレースケール画像を返す
      • <0:読み込んだ画像をそのまま返す (alphaチャンネル付).
  • bool imwrite(const String& filename, InputArray img, const vector<int>& params=vector<int>() )
    • 機能:指定した画像にファイルを保存
    • 引数:
      •  filename – ファイル名
      •  image – 保存される画像
      •  params –
        フォーマット個別の保存パラメータ.詳細はここを参照
  • void imshow(const String& winname, InputArray mat)
    • 機能:指定したウインドウに画像を表示
    • 引数:
      • winname – ウインドウの名前
      • image – 表示される画像
  • void namedWindow(const String& winname, int flags=WINDOW_AUTOSIZE )
    • 機能:ウインドウの生成
    • 引数:
      • winname – ウインドウの名前
      • flag – ウインドウのフラグ
        • WINDOW_NORMAL :ユーザがウインドウをリサイズ可能 (制約なし).
        • WINDOW_AUTOSIZE :表示された画像に合うようにウインドウが自動調整する。ユーザは手動でウインドウサイズを変更できない。
        • WINDOW_OPENGL:ウインドウがOpenGLサポートで生成される。
  • void destroyAllWindows()
    • 機能:生成したウインドウを全て破壊する
  • int waitKey(int delay=0)
    • 機能:キーが押されるまでdelay[ms]待つ。delayが負の場合は無限に待つ。
    • 戻り値:入力されたキー。キー入力が指定された時間ない場合は-1を返す。

4.サンプルコード

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

int main(int argc, const char* argv[])
{
  // 画像データをファイルから読み込む
  cv::Mat src = cv::imread("~/src/opencv/samples/data/lena.jpg",cv::IMREAD_COLOR);

  // 画像の読み込みに失敗したらエラー終了する
  if(src.empty()) {
      std::cerr << "Failed to open image file." << std::endl;
      return -1;
  }

  cv::namedWindow("image", cv::WINDOW_AUTOSIZE);
  cv::imshow("image", src);
  cv::waitKey(0);
  cv::destroyAllWindows();

  return 0;
}

5.ビルド

  • 方法1: 端末を開き、以下のコマンドを実行する。なお、先頭の$はコマンドプロンプトを表しているので打ち込まない。

$ g++ test.cpp -I/usr/local/include/opencv2 -I/usr/local/include/opencv -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui

  • 方法2
    • (1) CMakeLists.txtを作る。
# cmake needs this line
cmake_minimum_required(VERSION 2.8)

# Define project name
project(sample1)

# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)

if(CMAKE_VERSION VERSION_LESS "2.8.11")
  # Add OpenCV headers location to your include paths
  include_directories(${OpenCV_INCLUDE_DIRS})
endif()

# Declare the executable target built from your sources
add_executable(sample1 sample1.cpp)

# Link your application with OpenCV libraries
target_link_libraries(sample1 ${OpenCV_LIBS})

(2) 以下のコマンドを実行する

$ cmake .
$ make

6.演習

  • このサンプルプログラムを少し変更して、好きな画像を表示させよう!

以上

 

&nbsp

コメントを残す

メールアドレスが公開されることはありません。