問題タブ [interlacing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - DirectShow を使用してキャプチャしたビデオのインターレースを解除する
KSPROPERTY_CAMERACONTROL_SCANMODE
(?に追加KSPROPERTY_VIDCAP_CAMERACONTROL
)
ウェブカメラの操作 インターレース ビデオを取得しています。その Web カメラへのアクセスは、videoInput ライブラリ (OpenCV の一部として) を使用して DirectShow で行われます。
OpenCVで現在利用可能なオプション/列挙型でその(インターレース)モードを制御する方法が見つからないため、MSDNを掘り下げて次のことを見つけました:
IAMCameraControl
PROPSETID_VIDCAP_CAMERACONTROL
インターフェイスは、 ( http://msdn.microsoft.com/en-us/library/dd389145(v=vs.85).aspx#methods )にリストされている限り、さまざまなプロパティを取得/設定するために使用できます。PROPSETID_VIDCAP_CAMERACONTROL
列挙型の 3 つのブロック (「USB ビデオ クラスの前に 1 つ、UVC 用に 1 つ、Win8 用に 1 つ) をリストします。これらの値の中に、私が興味を持っているものがあります!それはKSPROPERTY_CAMERACONTROL_SCANMODE
( http://msdn.microsoft.com/ en-us/library/ff567802(v=vs.85).aspx )- Windows 7.a SDK がインストールされており、
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\strmif.h
ファイルに表示されるのは、「元の」セットのみをカバーする値のリストであり、これはpre-UVCであるため、インターレース モードを制御することはできません。そのファイルの列挙型は、MSDN サイトの次のようになります: http://msdn.microsoft.com/en-us/library/windows/desktop/dd318253(v=vs.85).aspx - 次に、必要なプロパティを追加するために「CameraControlProperty列挙を更新する必要があった」と主張するこのフォーラムを見つけました。 / )
私の質問は次のとおり です。:) システムでサポートされていると思われる必要な値 (または一連の値) を追加するには、どうすればよいでしょうか? 私は何が欠けていますか?
MSDN はカードをその本体に近づけて保持しているようで、あまり明らかにしていないようです。そのため、ここにいる善良な人々に助けを求めています。
誰かがそれを行う方法を理解し、知恵を共有できることを願っています.
私の最終的な目標は、OpenCV の videoInput を使用しsetVideoSettingCamera()
てインターレースを制御することです (取得した画像に黒い線がないようにします)。
interlacing - 圧縮の可能性をあまり失わずにビデオをインターレースできますか
場合によっては、インターレース ビデオを効率的に圧縮するのが難しいことを知っています。いくつかのテストを行いましたが、空の行がどのように埋められたかは思い出せませんが、インターレースすると jpeg が大きくなることに気付きました。
私が行っている C# プロジェクトでは、キャプチャ時に奇数行または偶数行をスキップするだけで、C++ ランタイム側からビデオをインターレースすることができます。つまり、画像処理アルゴリズムの速度をほぼ 2 倍にすることができ、より小さなデバイスで適切なフレーム レートを得る可能性が開かれます。
しかし、これは圧縮ステップで利益をもたらす何かをすることは可能ですか? 現在、私が使用している H.263 方式では、20 秒、640x480、15 fps のビデオを、私が使用している平均的なデバイスでエンコードするのに最大 3 ~ 4 分かかります。
したがって、問題は次のとおりです。フレームをインターレースするか、線形の損失の多い方法でフレームを変更して、この変更前よりも圧縮が難しくならないようにする方法はありますか?
c++ - デインターレースのために FFDShow を DirectShow グラフにコーディングしますか?
わかりました、私はしばらく探し回っていましたが、現在かなり困惑しています。これについて私が見つけることができる助けをいただければ幸いです。
複数のフィルター グラフで複数のカメラを開くアプリケーションがあります。それぞれが同じなので、そのうちの 1 つだけを説明します。大まかなアイデアは、PAL ビデオ ストリームがビデオ グラバー カードを介して読み込まれ、アプリケーションによって処理されるというものです。アプリは、DirectShow ビデオ フィルター グラフを構築します。各グラフには、ビデオ ソース、サンプル グラバー フィルター、およびヌル レンダラー フィルターが含まれています。取得したサンプルは、ビデオからのさまざまな静止画を表示し、OpenCV で描画およびスケーリングするために使用されます。したがって、現在のフィルタ グラフは次のようになります。
[Video Source] --> [/* ある種のコーデック フィルタ */] --> [Sample Grabber] --> [Null Renderer]
DirectShowがそれ自体をレンダリングできるようにするため、「何らかの」と言います。
ただし、PAL ビデオからのインターレースに問題があります。FFDShow と GraphEditor アプリを使用して、上記と同様のグラフを作成しましたが、SampleGrabber の前に FFDShow フィルターを使用して、ビデオ フィードで 3 次インターレース解除を実行するように設定しました。または、それを使用して、ビデオ グラバーからのビデオ ストリームをデコードし、インターレースを解除することもできます。
私の問題はこれです: コードで FFDShow フィルターを作成する方法がわかりません。コードにフィルターを追加する方法はありますか?もしそうなら、何をプロジェクトに含めたりリンクしたりすればよいですか? または、RenderStream を呼び出すときにインターレース解除を行う FFDShow フィルターを使用するように DirectShow を構成する方法はありますか?
このトピックに関するヘルプをいただければ幸いです。
更新 1:
さて、私が開発していた PC である Windows 8.1 マシンは何らかの理由で FFDShow フィルターを実行しないことがわかりましたが、ターゲット マシンである Windows 7 マシンではまったく同じコードが問題なく実行されます。なんらかの非互換性があるようです。:/
次のフェーズに進みます。インターレース解除です。Sample Grabber フィルタとその前のフィルタ (この場合は AVI デコンプレッサ) を分離することに成功し、それらを互いに切断してから、それらの間に FFDShow 生ビデオ フィルタを接続しました。もう 1 つの FFDShow フィルターは、サンプル グラバーから出力が読み取られないというグラフを何らかの形で混乱させるため、前者のフィルターを使用します。問題は、ビデオ フィードのインターレース解除を有効にするにはどうすればよいかということです。GraphEdit プログラムで同じグラフを作成したところ、インターレースが消えたので、フィルターがそれを実行できることがわかりました。しかし、コードでそれを有効にするにはどうすればよいですか?
更新 2 / 解決策
フィルター グラフを実行し、フィルターのトレイ アイコンを選択し、アイコンを右クリックしてメニューでインターレース解除を設定することで、なんとか機能させることができました。それは完璧に機能しました。Roman R の助けに感謝します。
interlacing - インターレース (NV12 形式) の生データからフレームを 2 つの画像 (偶数フィールドと奇数フィールド) に分割する方法
生の NV12 YUV プログレッシブ データがあり、各フレームを偶数フィールドと奇数フィールド (インターレース データ) の画像に分割する必要があります。
animation - GIF 画像がインターレースで歪む
Imagemagickとそのインターレース操作を使用して変換された画像がいくつかあります。これらはアニメーションGIF画像でした。問題は、変換中に画像が歪んでしまい、素晴らしいことをしたのは前の開発者だったので、元の画像が手元にないことです。GIFはもはやアニメーション化されておらず、各フレームには同じフレームの 4 つのコピーがあり、サイズが小さくなっています。私はこれまでImagemagickにあまり取り組んだことがありません。
歪んだバージョンから元のイメージを復元する方法はありますか?
使用したコマンドは次のとおりです。
convert <old-file.gif> -interlace plane <new-file.gif>
ありがとう