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

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

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

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

C++

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

Q&A

0回答

4074閲覧

VideoWriterを用いた動画ファイルの書き出しができない

Yusuke_nomecchi

総合スコア17

OpenCV

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

C++

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

0グッド

0クリップ

投稿2016/08/20 10:59

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
TV-L1を使ったopticalflowのアルゴリズムを動画に適用して、その結果を動画に出力する

###発生している問題・エラーメッセージ
OpenCV Error: Assertion failed (src.depth() == dst.depth()) in cvCvtColor, file /tmp/opencv20160107-29960-t5glvv/opencv-2.4.12/modules/imgproc/src/color.cpp, line 4421
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /tmp/opencv20160107-29960-t5glvv/opencv-2.4.12/modules/imgproc/src/color.cpp:4421: error: (-215) src.depth() == dst.depth() in function cvCvtColor

flowBgrを書き出そうとしたらこのエラーが出た

###該当のソースコード

ここにご自身が実行したソースコードを書いてください

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/superres/optical_flow.hpp>
#include <opencv2/video/tracking.hpp>
#define res 0.5
using namespace cv;
using namespace cv::superres;
int main()
{
// 動画ファイルの読み込み
String failname = "test3";
VideoCapture capture = VideoCapture(failname + ".mp4");
// TV-L1アルゴリズムによるオプティカルフロー計算オブジェクトの生成
Ptr<DenseOpticalFlowExt> opticalFlow = superres::createOptFlow_DualTVL1();

// 前のフレームを保存しておく Mat prev; capture >> prev; resize(prev, prev, Size(), res, res); int width = prev.cols; int height = prev.rows; //動画書き出しのファイル VideoWriter writer(failname + "TV-L1Video.avi",CV_FOURCC_MACRO('S', 'V', 'Q', '3'),20.0,Size(width,height),true); while (waitKey(1) == -1) { // 現在のフレームを保存 Mat curr; capture >> curr; resize(curr, curr, Size(), res, res); // オプティカルフローの計算 Mat flowX, flowY; opticalFlow->calc(prev, curr, flowX, 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); // 表示 imshow("input", curr); imshow("optical flow", flowBgr); imwrite("s.png", flowBgr*255); writer<<flowBgr; // 前のフレームを保存 prev = curr; }

}

###補足情報(言語/FW/ツール等のバージョンなど)
C++ Opencv2.4.9 xcode

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

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

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

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

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

yohhoy

2016/08/21 04:56

直前の`imwrite("s.png", flowBgr*255);`までは動作するのであれば、VideoWriterの内部処理でエラーが発生しているようです。気休めかもしれませんが、VideoWriterに書き出す直前にflowBgrのデータ形式をCV_F32→CV_U8に変換してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問