パソコン関連のメモとして色々書いていきます。
カレンダー
04 | 2024/05 | 06 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
ブログ内検索
ビットマップのヘッダを手に入れるために以下を行う
上記の情報をビットマップのヘッダ情報へ置き換える
(bitsizeを使わなくてよくなるのであればほぼ不要になる記述)
バッファの確保を行う
バッファを取得
画像データの入れ物を作成
(srcがカラーでdstはグレースケール)
バッファから格納する
データの反転を修正
グレースケールへチャンネル数を下げる
あとは、dstをオプティカルフローの関数へ入れればOK
AM_MEDIA_TYPE am_media_type;pSampleGrabber->GetConnectedMediaType(&am_media_type);VIDEOINFOHEADER *pVideoInfoHeader =(VIDEOINFOHEADER *)am_media_type.pbFormat;
上記の情報をビットマップのヘッダ情報へ置き換える
(bitsizeを使わなくてよくなるのであればほぼ不要になる記述)
BITMAPINFO BitmapInfo;ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );CopyMemory( &BitmapInfo.bmiHeader, &(pVideoInfoHeader->bmiHeader), sizeof(BITMAPINFOHEADER) );long bitsize = BitmapInfo.bmiHeader.biSizeImage;
バッファの確保を行う
char *pBuffer = (char *)malloc(bitsize);char *pBuffer2 = (char *)malloc(bitsize);
バッファを取得
pSampleGrabber->GetCurrentBuffer(&nBufferSize,(long *)pBuffer);pSampleGrabber->GetCurrentBuffer(&nBufferSize,(long *)pBuffer2);
画像データの入れ物を作成
(srcがカラーでdstはグレースケール)
IplImage *src = cvCreateImage( cvSize(width, height), IPL_DEPTH_8U, 3);IplImage *src2 = cvCreateImage( cvSize(width, height), IPL_DEPTH_8U, 3);IplImage *dst = cvCreateImage( cvSize(width, height), IPL_DEPTH_8U, 1);IplImage *dst2 = cvCreateImage( cvSize(width, height), IPL_DEPTH_8U, 1);
バッファから格納する
src->imageData=(char *)pBuffer;src2->imageData=(char *)pBuffer2;
データの反転を修正
cvFlip(src,NULL,0);cvFlip(src2,NULL,0);
グレースケールへチャンネル数を下げる
cvCvtColor(src,dst,CV_RGB2GRAY);cvCvtColor(src2,dst2,CV_RGB2GRAY);
あとは、dstをオプティカルフローの関数へ入れればOK
PR
//メモ //////////////////////////////////////////////////////////////
// OpenCV で実行時に cv::Exception がでる場合の対処方法
// オプティカルフロー関数類(cvCalcOpticalFlowPyrLK、cvCalcOpticalFlowHS)が動かない場合の対処方法
//////////////////////////////////////////////////////////////////////
読み込みで特殊な物↓ 過去を参考にファイルを作成
#include <qedit.h> // SampleGrabber用
次に
戻り値は基本的に S_ で始まるため、エラーが帰ってこないらしい//COMの初期化?CoInitialize(NULL);
RenderFileを利用する前に以下のことを行っておく
// SampleGrabber(Filter)を生成CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC, IID_IBaseFilter, (LPVOID *)&pSampleGrabberFilter);// FilterからISampleGrabberインターフェースを取得しますpSampleGrabberFilter->QueryInterface(IID_ISampleGrabber, (LPVOID *)&pSampleGrabber);// SampleGrabberを接続するフォーマットを指定。// ここがポイントです。// ここの指定の仕方によりSampleGrabberの挿入箇所を// 決定できます。このサンプルのような指定をすると// 画面出力の寸前でサンプルを取得できます。AM_MEDIA_TYPE am_media_type;ZeroMemory(&am_media_type, sizeof(am_media_type));am_media_type.majortype = MEDIATYPE_Video;am_media_type.subtype = MEDIASUBTYPE_RGB24;am_media_type.formattype = FORMAT_VideoInfo;pSampleGrabber->SetMediaType(&am_media_type);// GraphにSampleGrabber Filterを追加pGraphBuilder->AddFilter(pSampleGrabberFilter,L"Sample Grabber");
RenderFileを利用した後、バッファからデータを取得するように変更する
TRUEでデータを取得し、FALSEで取得しないため、不要であればOFFにするpSampleGrabber->SetBufferSamples(TRUE);
S_ で始める戻り値は常に関数の実行は成功していることを示す
E_ で始まる戻り値がエラーを示している
参考:
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200510/05100005.txt
E_ で始まる戻り値がエラーを示している
参考:
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200510/05100005.txt
内容は作成中なので、間違いを含みます・・・
ぶっちゃけ、メモです
ぶっちゃけ、メモです
//メモ:シーク制御において、IMediaSeeking で特定の地点へ移動させ、画像を取得する方法しかなさそう。
//まだ、画像取得はVMRを利用していないと、停止状態でないとできない
//IBasicVideoを利用
// タイムフォーマットhttp://msdn.microsoft.com/ja-jp/library/cc370946.aspx
// を利用しビデオフレームにして行う?//ビデオフレーム:TIME_FORMAT_FRAME
//this->pMediaSeeking->SetTimeFormat( &TIME_FORMAT_FRAME );
//初期画像と、次の場面の画像を取得テスト
//ナノ秒 1^-9乗
LONGLONG count=3^8; //0.8秒
this->pMediaSeeking->SetPositions(0,AM_SEEKING_AbsolutePositioning,0,AM_SEEKING_AbsolutePositioning);
this->pMediaSeeking->SetPositions(NULL,AM_SEEKING_NoPositioning, &count,AM_SEEKING_IncrementalPositioning);
//タイムスタンプをなくすことで高速処理? pMediaFilter->SetSyncSource(NULL);
最初は
IBasicVideoを利用してやろうとしてたのだが・・・
今まで再生できていたのが再生できなくなった・・・
⇒ヤバイ
IBasicVideoは制約が大きいのでとか言い訳してみる。
というわけで、qedit.h を使いたくはなかったが、使うように変更することに・・・
まず、
http://blogs.yahoo.co.jp/sealion1945/59282388.html
をみて編集
*** 以下コピー ***
SampleGrabberを使用する場合に必要となる、Qedit.hを取得し修正する。
■取得
http://www.koders.com/cpp/fid614F3E471D5D6B7854B5549ADFEC790E3B8703F6.aspx
■修正-以下の5ヶ所をコメントアウトする
//#include "dxtrans.h"
IDxtCompositor //: public IDXEffect
IDxtAlphaSetter //: public IDXEffect
IDxtJpeg //: public IDXEffect
IDxtKey //: public IDXEffect
*** ここまで ***
取得では左上にダウンロードがあるので、そのままファイルをもらってきた。
で、これからいじいじしていく。。。
IBasicVideoを利用してやろうとしてたのだが・・・
今まで再生できていたのが再生できなくなった・・・
⇒ヤバイ
IBasicVideoは制約が大きいのでとか言い訳してみる。
というわけで、qedit.h を使いたくはなかったが、使うように変更することに・・・
まず、
http://blogs.yahoo.co.jp/sealion1945/59282388.html
をみて編集
*** 以下コピー ***
SampleGrabberを使用する場合に必要となる、Qedit.hを取得し修正する。
■取得
http://www.koders.com/cpp/fid614F3E471D5D6B7854B5549ADFEC790E3B8703F6.aspx
■修正-以下の5ヶ所をコメントアウトする
//#include "dxtrans.h"
IDxtCompositor //: public IDXEffect
IDxtAlphaSetter //: public IDXEffect
IDxtJpeg //: public IDXEffect
IDxtKey //: public IDXEffect
*** ここまで ***
取得では左上にダウンロードがあるので、そのままファイルをもらってきた。
で、これからいじいじしていく。。。
1.System32 にコピーする
2.【regsvr32 /u ファイル名】 と入力する
例:regsvr32 flvsplitter.ax
また、エラーが出た場合はコマンドプロンプトを管理者として実行して、上記のことを行うとインストールできることもある。
以上
2.【regsvr32 /u ファイル名】 と入力する
例:regsvr32 flvsplitter.ax
また、エラーが出た場合はコマンドプロンプトを管理者として実行して、上記のことを行うとインストールできることもある。
以上
最新記事
(10/18)
(10/18)
(10/18)
(10/18)
(10/11)
(09/27)
(09/24)
(09/18)
(09/14)
(09/13)
(09/13)
(09/13)
(09/13)
(09/12)
(09/12)
(09/12)
(09/12)
(09/12)
(09/12)
(09/12)
(09/06)
(09/06)
(09/04)
(09/04)
(09/03)