OpenCVでフレームバッファとして使用する循環バッファを実装しようとしています(Cを使用)。C + OpenCV:循環バッファ付きIplImage
私は臆面もなく車輪の再発明保存するには、この記事から循環バッファの実装を盗まれました:
EDIT:OK、私はいくつかのことを再定義しました。すなわち私自身の循環バッファーを実装しました。今、私は意味をなさないエラーを受けています。ここで
は、私が使用している循環バッファの実装です:ここで
#define BUFFER_SIZE 100
typedef struct
{
IplImage* queue[BUFFER_SIZE];
IplImage *in;
IplImage *out;
int num_frames;
int in_ctr;
int out_ctr;
int update_flag;
} frame_buffer;
get関数である:ここで
IplImage* buff_get()
{
IplImage* nextfr;
if(frbuff.num_frames == 0)
{
return NULL;
}
nextfr = frbuff.out++;
if(++frbuff.out_ctr == BUFFER_SIZE)
{
frbuff.out = &frbuff.queue[0];
frbuff.out_ctr = 0;
}
--frbuff.num_frames;
return nextfr;
}
はプット機能である:
int buff_put(IplImage* nextfr)
{
if(++frbuff.num_frames > BUFFER_SIZE)
{
return 0;
}
frbuff.in++;
frbuff.in = nextfr;
if(++frbuff.in_ctr == BUFFER_SIZE)
{
frbuff.in = &frbuff.queue[0];
frbuff.in_ctr = 0;
}
return 1;
}
すべてがそうですOKに行く。私はサイズを印刷することができますので、私が知っているバッファは、フレームが表示されます。しかし、バッファにあるイメージを表示しようとすると、すべてがうまくいかなくなります。
私はこれをしようとした場合
:IplImage* curr_frame = cvCreateImage(cvSize(640,480),8,3);
cvNamedWindow("proc_window",CV_WINDOW_AUTOSIZE);
cvShowImage("proc_window",curr_frame);
while(1)
{
if(buff_size() > 0)
{
if(buff_flag_check()) curr_frame = buff_get();
if(curr_frame != NULL)
{
cvShowImage("proc_window",curr_frame);
}
}
は私がcvShowImageは()を呼び出したときに次のエラーを受け取る:
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /home/fagg/src/OpenCV-2.3.1/modules/core/src/array.cpp, line 2482
terminate called after throwing an instance of 'cv::Exception'
what(): /home/fagg/src/OpenCV-2.3.1/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat
私はここで何が起こっているかのように、非常に混乱しています。うまくいけば、自分よりも目が肥えた人が何が起こっているのかを見ることができます。
しかし、それは間違いなくコンパイルされます...だから何が起こっていますか? – NOP
私の質問を更新しました...何が起こっているのか分からないので、最初から始めましたが、今は追跡できないタイプの問題があります。 – NOP
あなたの構造体では、IplImages IplImage *キュー[BUFFER_SIZE]へのポインタの配列を参照してください。これらの画像をすべて初期化しますか?私はあなたがそれらを自分で作成するか、どこかからそれらを得るかどうか? cvGetMat()でエラーが発生する可能性のある、適切に初期化されていないと、割り当て問題が発生する可能性があります。 – snugglo