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

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

ただいまの
回答率

90.52%

  • C++

    3442questions

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

  • MacOS(OSX)

    1899questions

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

  • OpenCV

    1071questions

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

  • openFrameworks

    82questions

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

  • CMake

    70questions

    CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

cvMinMaxLocを用い, 動画の値の最大,最小値,およびその位置をリアルタイムで取り出したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 211

Ken.Satooo

score 7

 前提・実現したいこと

関数cvMinMaxLoc()を用い, 動画中の値の最大,最小値,およびその位置をリアルタイムで取り出したいのですがエラーが発生してしまいうまくできません.
分かる方がいらっしゃいましたらご教授いただけると幸いです.

追記
顕著性を算出するためupdate内で処理を行なっています.
下記の処理(cvMinMaxLoc)以外は正常に作動していることを確認しています.

cvMinMaxLoc( &saliencyMap_conv, &min_val, &max_val, &min_loc, &max_loc, NULL );

 発生している問題・エラーメッセージ

2018-07-19 21:34:53.688021+0900 saliency-drive[16457:5455166] AVD info: codecHALEnableHEVCDecoder = 1
2018-07-19 21:34:53.694294+0900 saliency-drive[16457:5455166] video loaded at 1280 x 720 @ 29.970030 fps
2018-07-19 21:34:53.883520+0900 saliency-drive[16457:5455236] AVD info: codecHALEnableHEVCDecoder = 1
2018-07-19 21:34:53.894466+0900 saliency-drive[16457:5455165] [] <<<< FigBufferedAirPlayClientRoutingRegistry >>>> FigBufferedAirPlayClientRoutingRegistryCreate: FigBufferedAirPlayClientRoutingRegistry created
OpenCV(3.4.2) Error: Bad argument (Unknown array type) in cvarrToMat, file /Users/username/OpenCV/opencv-3.4.2/modules/core/src/matrix_c.cpp, line 181
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: OpenCV(3.4.2) /Users/username/OpenCV/opencv-3.4.2/modules/core/src/matrix_c.cpp:181: error: (-5:Bad argument) Unknown array type in function 'cvarrToMat'

 該当のソースコード

#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){  
  // 動画の読み込み
  ofBackground( 255,255,255 );
  ofSetVerticalSync( true );
  player.load( "test.mp4" );
  player.play();

}

//--------------------------------------------------------------
void ofApp::update(){
  player.update();

  if(player.isFrameNew()){
    // Mat変換
    Mat mat = ofxCv::toCv( player ).clone();
    // 白黒加工
    cvtColor( mat, mat, COLOR_BGR2GRAY );

    // // 顕著性マップ(SPECTRAL_RESIDUAL)に変換
    saliencyAlgorithm_SPECTRAL_RESIDUAL->computeSaliency( mat.clone(), saliencyMap );
    //    ofLog()<<"saliencyMap_SPECTRAL_RESIDUAL_at : "<<(int)saliencyMap_SPECTRAL_RESIDUAL.at<uchar>( 0, 0 );

    // アルファチャンネルの正規化を行う
    normalize( saliencyMap.clone(), saliencyMap_norm, 0.0, 255.0, NORM_MINMAX );
    //    ofLog()<<"正規化 : "<<(int)saliencyMap_norm.at<uchar>( 0, 0 );

    // Matの型(ビット深度)を変換する
    saliencyMap_norm.convertTo( saliencyMap_conv, CV_8UC3 );
    //    ofLog()<<"Mat_type : "<<(double)saliencyMap_SPECTRAL_RESIDUAL_conv.at<double>( 0, 0 );

    cvMinMaxLoc( &saliencyMap_conv, &min_val, &max_val, &min_loc, &max_loc, NULL );

    ofLog()<<"max_location[x] : "<<max_loc.x;
    ofLog()<<"max_location[y] : "<<max_loc.y;

    // 疑似カラー(カラーマップ)変換
    applyColorMap( saliencyMap_conv.clone(), saliencyMap_color, COLORMAP_JET );

  }
}

//--------------------------------------------------------------
void ofApp::draw(){
  // 顕著性マップ(SPECTRAL_RESIDUAL:カラーマップ)を出力
    ofxCv::drawMat( saliencyMap_color, 0, 0 );
  // FPS表示
  ofDrawBitmapStringHighlight( ofToString(ofGetFrameRate()), 20, 20 );
}
#pragma once

#include "ofMain.h"
#include "ofxOpenCv.h"
#include "ofxCv.h"
#include "ofxGui.h"
#include "saliencySpecializedClasses.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/core/core.hpp"
#include "iostream"

using namespace std;
using namespace cv;
using namespace saliency;

class ofApp : public ofBaseApp{

public:
  void setup();
  void update();
  void draw();

  // 動画
  ofVideoPlayer player;

  // cvMinMaxLocで使用
  CvPoint min_loc, max_loc;
  double min_val, max_val;

  // 出力データ(SPECTRAL_RESIDUAL)
  ofImage outputOfImg;

  // 顕著性マップ
  Mat saliencyMap, saliencyMap_norm, saliencyMap_conv, saliencyMap_color;

  // SPECTRAL_RESIDUAL(顕著性マップを求めるアルゴリズム : 画像)
  Ptr<StaticSaliencySpectralResidual> saliencyAlgorithm_SPECTRAL_RESIDUAL = StaticSaliencySpectralResidual::create();

};

 補足情報(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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

C言語版APIのcvMinMaxLocではなく、C++版のminMaxLocを使うのがいいのではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/20 12:25 編集

    回答のほどありがとうございます.
    ご指摘通りminMaxLocを利用すると無事出力されました.
    ご教授のほどありがとうございます.

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C++

    3442questions

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

  • MacOS(OSX)

    1899questions

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

  • OpenCV

    1071questions

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

  • openFrameworks

    82questions

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

  • CMake

    70questions

    CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

  • トップ
  • C++に関する質問
  • cvMinMaxLocを用い, 動画の値の最大,最小値,およびその位置をリアルタイムで取り出したい