質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

870閲覧

動画の顕著性マップ出力について(opencv_contrib/saliency)

ks-cap

総合スコア22

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/07/10 08:49

編集2018/07/20 04:05

前提・実現したいこと

https://github.com/opencv/opencv_contrib/blob/master/modules/saliency/samples/computeSaliency.cpp

上記のサイトにて公開されているソースコードを参考に質問させていただきます.

OpenCv_contrib に含まれている saliency の BinWangApr2014 を用い, 動画データを顕著性マップにかけようと試みたのですが, 出力結果が真っ黒になってしまい上手く出力されません.
デバックして調べたところ動画データの読み込みは確認できたのですが, 動画の顕著性の処理( computeSaliency )を施すと, 1フレームごとに出力される Mat データのピクセル全てが1(同一)になってしまい, その結果同一色(真っ黒)になってしまうことが判明しました.正規化の値を50に設定すると出力結果の画面は全て灰色になります.

この解決方法がわかる方は, 是非ご教授お願いいたします.

試したこと

画像の顕著性マップ(SPECTRAL_RESIDUAL, FINE_GRAINED)は出力に成功していたので, update関数内のBinWangApr2014での処理を画像の顕著性マップ(SPECTRAL_RESIDUAL, FINE_GRAINED)の処理に置き換えたところ, 顕著性マップが施された動画が出力されました.
となると BinWangApr2014 の根本的な問題なのでしょうか...

ソースコード

C++

1#pragma once 2 3#include "ofMain.h" 4#include "ofxOpenCv.h" 5#include "ofxCv.h" 6#include "saliencySpecializedClasses.hpp" 7#include "opencv2/highgui.hpp" 8#include <iostream> 9#include "opencv2/core/core.hpp" 10 11using namespace std; 12using namespace cv; 13using namespace saliency; 14 15class ofApp : public ofBaseApp { 16 17public: 18 void setup(); 19 void update(); 20 void draw(); 21 22// 省略 23 24 // 動画 25 ofVideoPlayer player; 26 27 // 出力データ(白黒動画) 28 ofImage outputOfImg4; 29 30 // 顕著性マップ 31 Mat saliencyMap_BinWangApr2014, saliencyMap_BinWangApr2014_2; 32 // 出力される顕著性マップ 33 Mat saliencyMap_BinWangApr2014_3; 34 35 // BinWangApr2014(顕著性マップを求めるアルゴリズム : 動画) 36 Ptr<MotionSaliencyBinWangApr2014> saliencyAlgorithm_BinWangApr2014 = MotionSaliencyBinWangApr2014::create(); 37};

C++

1#include "ofApp.h" 2 3//-------------------------------------------------------------- 4void ofApp::setup(){ 5 6 // 動画の読み込み 7 ofBackground(255,255,255); 8 ofSetVerticalSync(true); 9 player.load("test.mp4"); 10 player.play(); 11 12 // 顕著性マップ(BinWangApr2014)の設定 13 ofPixelsRef p = player.getPixels(); 14 Mat m = ofxCv::toCv(p).clone(); 15 16 saliencyAlgorithm_BinWangApr2014.dynamicCast<MotionSaliencyBinWangApr2014>()->setImagesize( m.cols, m.rows ); 17 saliencyAlgorithm_BinWangApr2014.dynamicCast<MotionSaliencyBinWangApr2014>()->init(); 18 19 ofLog()<<"m_cols : "<<m.cols; 20 ofLog()<<"m_rows : "<<m.rows; 21} 22 23//-------------------------------------------------------------- 24void ofApp::update(){ 25 player.update(); 26 27 if(player.isFrameNew()){ 28 // 1フレームを取得 29 ofPixelsRef pix = player.getPixels(); 30 // Mat変換 31 Mat mat = ofxCv::toCv(pix).clone(); 32 // 白黒加工 33 cvtColor( mat, mat, COLOR_BGR2GRAY ); 34 // 画像(ofImage)に変換 : 動いているのを確認 35 ofxCv::toOf( mat, outputOfImg4 ); 36 outputOfImg4.update(); 37 38 // 顕著性マップ(BinWangApr2014)に変換 : 1フレームごとに出力されるMatデータのピクセル全てが1(同一)になってしまい, 39 saliencyAlgorithm_BinWangApr2014->computeSaliency( mat.clone(), saliencyMap_BinWangApr2014 ); 40 41 ofLog()<<"saliencyMap_BinWangApr2014_cols : "<<saliencyMap_BinWangApr2014.cols; 42 ofLog()<<"saliencyMap_BinWangApr2014_rows : "<<saliencyMap_BinWangApr2014.rows; 43 ofLog()<<"saliencyMap_BinWangApr2014_type : "<< saliencyMap_BinWangApr2014.type(); 44 ofLog()<<"BinWangApr2014_at : "<<(int)saliencyMap_BinWangApr2014.at<uchar>(0,0); 45 46 // アルファチャンネルの正規化を行う 47 normalize( saliencyMap_BinWangApr2014.clone(), saliencyMap_BinWangApr2014_2, 0.0, 255.0, NORM_MINMAX); 48 49 ofLog()<<"正規化 : "<<(int)saliencyMap_BinWangApr2014_2.at<uchar>(0,0); 50 51 // Matの型(ビット深度)を変換する 52 saliencyMap_BinWangApr2014_2.convertTo( saliencyMap_BinWangApr2014_3, CV_8UC3 ); 53 ofLog()<<"Matの型 : "<<(double)saliencyMap_BinWangApr2014_3.at<double>(0,0); 54 55 } 56} 57 58//-------------------------------------------------------------- 59void ofApp::draw(){ 60 61 // 出力(動画) 62 player.draw(0, 300, 300, 200); 63 outputOfImg4.draw( 300, 300, 300, 200 ); 64 65 // 顕著性マップ(BinWangApr2014)を出力 66 ofxCv::drawMat(saliencyMap_BinWangApr2014_3, 600, 300, 300, 200); 67 // FPS出力 68 ofDrawBitmapStringHighlight(ofToString(ofGetFrameRate()), 20, 20); 69} 70

出力結果

[notice ] saliencyMap_BinWangApr2014_cols : 1280 [notice ] saliencyMap_BinWangApr2014_rows : 720 [notice ] saliencyMap_BinWangApr2014_type : 0 [notice ] BinWangApr2014_at : 1 [notice ] 正規化 : 0 [notice ] Matの型 : 0

補足情報(FW/ツールのバージョンなど)

MacbookPro 10.13.5
macOS HighSierra
CMake 3.10.0-rc5
openFrameworks pre release v0.9.8
Xcode 9.3
openCv_4.3.2, openCv-contrib_4.3.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問