動画処理の勉強をしています。動画の反転はできたのですが、そこの反転させる関数をグレースケールにする関数にすると、保存された動画ファイルを見ることができません。
環境はopencv4.0.0,windouws10,Visualstudio2017,C++です。
これができないと前へ進めず困っています。
どなたかご返答よろしくお願いします。
補足 すいませんソースコード貼るの完全に忘れていました。
#include <opencv2/opencv.hpp>
int main(void)
{
// 動画ファイルを取り込むためのオブジェクトを宣言する
cv::VideoCapture cap;
cap.open("C:/opencv/sources/samples/data/Megamind.avi");
// 動画ファイルが開けたか調べる if (cap.isOpened() == false) { printf("ファイルが開けません。\n"); return -1; } // 作成する動画ファイルの諸設定 int fourcc, width, height; double fps; width = (int)cap.get(cv::CAP_PROP_FRAME_WIDTH); // フレーム横幅を取得 height = (int)cap.get(cv::CAP_PROP_FRAME_HEIGHT); // フレーム縦幅を取得 fps = cap.get(cv::CAP_PROP_FPS); // フレームレートを取得 fourcc = cv::VideoWriter::fourcc('X', 'V', 'I', 'D'); // AVI形式を指定 // * エンコード形式 "XVID" = AVI, "MP4V" = MPEG4, "WMV1" = WMV // 動画ファイルを書き出すためのオブジェクトを宣言する cv::VideoWriter writer; writer.open("ビデオ.avi", fourcc, fps, cv::Size(width, height)); // 画像を格納するオブジェクトを宣言する cv::Mat frame, dst; for (;;) { // 1フレームを取り込む cap >> frame; // cap から frame へ // 画像から空のとき、無限ループを抜ける if (frame.empty() == true) { break; } // ウィンドウに画像を表示する cv::imshow("変換中", frame); //ここにグレースケールの関数を入れると保存されたファイルが再生できない。※1 // 動画ファイルへ書き出す writer << dst; // dst から writer へ // 1ms待つ cv::waitKey(1); } return 0;
}
これがソースコードです。
今は書いていませんが、グレースケールにするときは※1のところにcvtColor(frame, gray_frame, cv::COLOR_BGR2GRAY);を書き込んでいます。
もちろんその時はgray_frameを宣言もしています。
どなたか詳しい方よろしくお願いします。

回答1件
あなたの回答
tips
プレビュー