opencvでの動画保存に関して

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ttb
記事: 17
登録日時: 6年前
住所: 東京都

opencvでの動画保存に関して

#1

投稿記事 by ttb » 6年前

いつもお世話になっております.
開発環境 Windows10 Visual Studio 2013 for desktop opencv2.4.9 です.
現在カメラ映像(動画としてaviファイルに保存済み)から青色の物体を検出してその物体の輪郭線を描画したものを保存するというプログラムを作っています.しかしもともとの動画は1分40秒ほどあるのみ保存された動画は1分17秒までしか保存されていません.
自分では全く原因が分からないのでわかる方いらっしゃいましたらお教えください.

コード:

#include<opencv2/opencv.hpp>
#include<opencv2/opencv_lib.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>

#include<iostream>
#include<stdio.h>
#include<vector>

using namespace cv;
using namespace std;

int main(void){
	Mat Frame, hsv, mask, fil,  output;

	VideoCapture cap("動画ファイル名.avi"); 
	VideoWriter writer("保存用.avi",-1,30, Size(640, 480), true);
	
	while (true){
		cap >> Frame;
		imshow("Frame",Frame);
		cvtColor(Frame, hsv, CV_RGB2HSV);
		imshow("hsv", hsv);

		inRange(hsv, Scalar(0, 150, 0), Scalar(180, 255, 255), mask);//青色取得
		imshow("mask", mask);
		
		vector<vector<Point> > contours; 
		findContours(mask, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
		output = Mat::zeros(mask.size(), CV_8UC3);

		Scalar color = Scalar(0, 255, 0);//輪郭線の色指定(B,G,R)
		drawContours(output, contours, -1, color, 2);

		imshow("output", output);
                writer << output;

		if (waitKey(1) == 27){
			break;
		}
	}
}

アバター
usao
記事: 1887
登録日時: 11年前

Re: opencvでの動画保存に関して

#2

投稿記事 by usao » 6年前

保存時に無圧縮にしていますか?
その場合,圧縮形式を変えると保存できたりしませんか?

もしそうであれば,
AVIには2GBの制限があるので,そのせいかもしれません.

VBGサイズ3chの画像はざっくり900KB
→秒間30フレームなら 1秒あたり27MB
→何秒で2GBになるかを電卓で計算 : 2048/27 ≒ 75.852 → 1分と15秒ちょい

で,おおよそ
> 1分17秒
に近い感じかな,と.
オフトピック
OpenCVで無圧縮AVI作ると,それをOpenCVで読めないとかいう,厄介な問題があった記憶

ttb
記事: 17
登録日時: 6年前
住所: 東京都

Re: opencvでの動画保存に関して

#3

投稿記事 by ttb » 6年前

無圧縮にしてしています.
2GBの制限があるのは知りませんでした.
圧縮をして一度試してみたいと思います.

アバター
usao
記事: 1887
登録日時: 11年前

Re: opencvでの動画保存に関して

#4

投稿記事 by usao » 6年前

> VBGサイズ

おっと,typo(?)ですね.
正しくは「VGAサイズ」です.失礼しました.

返信

“C言語何でも質問掲示板” へ戻る