22

Webカメラに接続して画像操作を行うプログラムをC#で作成しています。win32 api(avicap32.dll)を使用してWebカメラに接続し、クリップボードに送信するメッセージを送信するアプリケーションが動作しています。問題は、ペイントからアクセスできますが、プログラムから読み取るとnullポインタになることです。

これは私がウェブカメラを接続するために使用するコードです:

mCapHwnd = capCreateCaptureWindowA("WebCap", 0, 0, 0, 320, 240, 1024, 0);

SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0);
SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 0, 0);

そして、これは私が画像をクリップボードにコピーするために使用するものです:

SendMessage(mCapHwnd, WM_CAP_GET_FRAME, 0, 0);

SendMessage(mCapHwnd, WM_CAP_COPY, 0, 0);
tempObj = Clipboard.GetDataObject();
tempImg = (System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap);

コードを短くするためにコードから削除したエラーチェックがいくつかあります。

前もって感謝します :)

4

6 に答える 6

17

最近、この分野で趣味の仕事を始めました。

私たちは、 opencvdotnetラッパーでOpenCVライブラリを使用することに決めました。Webカメラからのフレームのキャプチャをサポートしています。

using (var cv = new OpenCVDotNet.CVCapture(0))
{
    var image = cv.CreateCompatibleImage();
    // ...
    cv.Release();
}

また、画像操作を行っている場合、OpenCVの画像処理アルゴリズムはOpenCVDotNet.Algsアセンブリ内にラップされています。

このルートを使用する場合は、必ずOpenCVバージョン1.0をインストールしてください(Vista 64ビットを使用している場合は「c:\ programfiles \ opencv」にインストールするか、「mklink OpenCV'c:\ program files(x86)」にインストールしてください)。正しいディレクトリからの\OpenCV`"またはopencvdotnetはインストールされません)。

于 2008-10-24T17:08:20.043 に答える
7

カメラ データをアプリケーションに取り込むには、DirectShow と WIA の 2 つの方法があります。マイクロソフトは、WIAの使用を推奨しています。WIAのインターフェイスは非常に単純で、頭を悩ませることができます。少し前に行った作業に基づいて、オープン ソースのWIA デスクトップ ライブラリを作成して公開しました。

場合によっては、WIA の問題は単純すぎることです。たとえば、カメラのプロパティ (フレーム レート、解像度など) を調整する場合、WIA は機能しません。Microsoft は DirectShow を非推奨にしましたが、そのすべての機能を備えた代替品は提供されませんでした。また、既存のすべてのプラットフォームで引き続き正常に動作することがわかりました (非常に定着しているため、サポートがなくなることは想像できません)。近いうちに)。

SourceForgeには、非常に優れたDirectShow ライブラリがあります。それに関する唯一の「問題」は、それが本当に複雑であることであり、それは、DShowが非常に複雑で、そもそも混乱しているという事実に起因しています。ラッパーが実行できることは簡単ではありませんが、ビデオの表示やフレームのキャプチャなど、多くの一般的なユース ケースのサンプルを提供します。オーバーレイを追加したり、他のフィルターを挿入したりする場合は、それを行うことができますが、まったく簡単ではないことに注意してください.

于 2008-10-24T18:11:32.847 に答える
2

この記事を見てみましょう: http://www.codeproject.com/KB/miscctrl/webcam_c_sharp.aspx

OpenCVNetWrapper をインストールして使用するよりも簡単すぎます。

于 2010-11-09T03:45:11.807 に答える
0

これは、C# で Web カメラの画像を取得する方法でも尋ねられました。そして、次のものが役に立つかもしれません (スパムで申し訳ありませんが、これは質問に答えるのに本当に役立ちます):

Windows アプリ CamTimer (.NET/C# で記述) の完全なソースコードをリリースしました。https://github.com/johanssonrobotics/CamTimerで完全なコードをダウンロード/表示します (動作する Webcam の例を含む) 。

ハッピーコーディング!

于 2012-07-26T08:58:28.033 に答える
0

OpenCV キャプチャ、EMGU キャプチャ、および私が試した他のすべてのキャプチャ ライブラリには
すべて同じ問題があります。プログラムで 640x480 を超えることはできません
(Windows ビデオ ソース ウィンドウを開かずに)。

これを使用することをお勧めします (これは機能します):
https://github.com/ofTheo/videoInput

于 2011-02-15T17:22:37.283 に答える
0

Clipboard.GetImage() を試しましたか? さまざまな Clipboard.Contains*() メソッドを試して、データがクリップボードに保存されている形式を確認することもできます。

于 2008-10-24T14:50:44.517 に答える