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

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

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

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

C++

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

Q&A

解決済

1回答

5973閲覧

opencv optical flowの使い方

mikazuki501

総合スコア23

OpenCV

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

C++

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

0グッド

0クリップ

投稿2016/06/28 04:22

編集2016/06/28 04:30

###前提・実現したいこと
今、二つの動画の類似度を評価するために、オプティカルフローをフレームごとに計算し、各点のオプティカルフローのノルムの和をとって格納する、というプログラムを書こうとしています。
以下のサイトを参考にしたのですが、如何せんC++を触れるのが初めてで、上手く書くことができません。
いま、//ここから の下にあるようにmatの和を取ろうとしたのですが、cvmMatがないと怒られてしまいます。
行列計算の仕方を教えていただけないでしょうか。

http://whoopsidaisies.hatenablog.com/entry/2013/12/15/020420

#include <opencv2/opencv.hpp> #include <opencv2/superres/optical_flow.hpp> using namespace cv; using namespace cv::superres; int main() { // 動画ファイルの読み込み VideoCapture capture = VideoCapture("mizuguchi_movie.mov"); // TV-L1アルゴリズムによるオプティカルフロー計算オブジェクトの生成 Ptr<DenseOpticalFlowExt> opticalFlow = superres::createOptFlow_DualTVL1(); // 前のフレームを保存しておく Mat prev; capture >> prev; //ここから Mat sum_X; Mat sum_Y; Mat tmpX; Mat tmpY; //ここまで while (waitKey(1) == -1) { // 現在のフレームを保存 Mat curr; capture >> curr; // オプティカルフローの計算 Mat flowX, flowY; opticalFlow->calc(prev, curr, flowX, flowY); //ここから tmpX = sum_X; tmpY = sum_Y; cvmAdd(sum_X,tmpX,flowX); cvmAdd(sum_Y,tmpY,flowY); //ここまで // オプティカルフローの可視化(色符号化) // オプティカルフローを極座標に変換(角度は[deg]) Mat magnitude, angle; cartToPolar(flowX, flowY, magnitude, angle, true); // 色相(H)はオプティカルフローの角度 // 彩度(S)は0~1に正規化したオプティカルフローの大きさ // 明度(V)は1 Mat hsvPlanes[3]; hsvPlanes[0] = angle; normalize(magnitude, magnitude, 0, 1, NORM_MINMAX); // 正規化 hsvPlanes[1] = magnitude; hsvPlanes[2] = Mat::ones(magnitude.size(), CV_32F); // HSVを合成して一枚の画像にする Mat hsv; merge(hsvPlanes, 3, hsv); // HSVからBGRに変換 Mat flowBgr; cvtColor(hsv, flowBgr, cv::COLOR_HSV2BGR); // 表示 cv::imshow("input", curr); cv::imshow("optical flow", flowBgr); // 前のフレームを保存 prev = curr; } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

ドキュメントによりますと、行列の加算はcvmAddじゃなくcvAdd。

投稿2016/06/28 04:37

episteme

総合スコア16614

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問