Visual Saliency を求める
【概要】
Visual Saliency(視覚的顕著性)とは、画像中で人間の視覚的注意を引きやすい領域を示す指標である。本手順では、OpenCV contrib の saliency モジュールに含まれる StaticSaliencyFineGrained クラスを使い、入力画像から Saliency マップを生成する C++ プログラムをビルド・実行する。
【目次】
【関連する外部ページ】
- OpenCV の公式ページ: https://opencv.org
- GitHub の OpenCV のページ: https://github.com/opencv/opencv/releases
- GitHub の OpenCV contrib(Saliencyモジュールを含む)のページ: https://github.com/opencv/opencv_contrib
【サイト内の関連情報】
- OpenCV について [PDF] , [パワーポイント]
- OpenCV のインストール,画像表示を行う C++ プログラムの実行手順: 別ページ »で説明
- OpenCVとPythonを活用した画像・ビデオ処理プログラム: 別ページ »にまとめ
- OpenCV 4 の C/C++ プログラム: 別ページ »にまとめている.
前提条件
- Linux環境
- OpenCV(saliency モジュールを含む opencv_contrib)がビルド済みであること
- g++(C++17に対応したコンパイラ)が利用可能であること
- wget コマンドが利用可能であること
手順
OpenCV の saliency モジュールは opencv_contrib に含まれており、標準の OpenCV 本体だけではビルドされない。opencv_contrib を含めてビルドしたOpenCV環境を用意した上で、次のサンプルプログラムを作成する。
- ソースファイルを作成する
以下の内容で
saliency_demo.cppという名前のファイルを作成する。StaticSaliencyFineGrainedクラスを使い、入力画像の Saliency マップを計算して表示する。#include <opencv2/core/utility.hpp> #include <opencv2/saliency.hpp> #include <opencv2/highgui.hpp> using namespace cv; using namespace cv::saliency; int main(int argc, char** argv) { if (argc != 2) return -1; Mat image = imread(argv[1]); if (image.empty()) return -1; Mat saliencyMap; PtrsaliencyAlgorithm = StaticSaliencyFineGrained::create(); if (saliencyAlgorithm->computeSaliency(image, saliencyMap)) { imshow("Original Image", image); imshow("Saliency Map", saliencyMap); waitKey(0); } return 0; } - ビルド
◆ Linux でのビルド手順例(
pkg-configを使う場合)g++ -std=c++17 -o a.out saliency_demo.cpp $(pkg-config --cflags --libs opencv4) - 使ってみる
wget https://www.kkaneko.jp/sample/lena_std.jpg ./a.out lena_std.jpg