C#中的网络摄像头使用

时间:2008-10-24 13:06:05

标签: c# clipboard webcam

我正在使用C#编写一个程序来连接网络摄像头并使用它进行一些图像处理。 我有一个工作的应用程序,使用win32 api(avicap32.dll)连接到网络摄像头并向它发送消息,将其发送到剪贴板。问题是,虽然可以从paint中访问,但是从程序中读取它会产生空指针。

这是我用来连接网络摄像头的代码:

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);

有一些错误检查,我已从代码中删除它以缩短它。

提前致谢:)

6 个答案:

答案 0 :(得分:17)

我最近开始在这个领域做一些爱好工作。

我们决定将OpenCV库与opencvdotnet包装器一起使用。它支持从网络摄像头捕获帧:

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

如果您正在进行图像处理,OpenCV的图像处理算法已经包含在OpenCVDotNet.Algs程序集中。

如果您决定采用此路线,请务必安装OpenCV 1.0版(如果您使用的是Vista 64位,则安装到“c:\ program files \ opencv”或“mklink OpenCV”c:\ program files (x86)\ OpenCV`“来自正确的目录,否则opencvdotnet将无法安装。”

答案 1 :(得分:6)

有两种方法可以将相机数据导入您的应用程序,DirectShow和WIA。 Microsoft建议您使用WIA,WIA的界面非常简单,可以包含您的大脑。我根据我之前的工作创建并发布了一个开源WIA desktop library

现在WIA的问题在某些情况下太简单了。例如,如果要调整相机属性(如帧速率,分辨率等),则WIA会降低。微软不赞成使用DirectShow,但他们确实没有给我们任何具有所有功能的替代品,而且我发现它在所有现有平台上都能正常运行(它已经非常根深蒂固,所以我无法想象支持会消失任何时候很快)。

非常好DirectShow library over at SourceForge。与它唯一的“问题”是它真的很复杂,这源于DShow刚刚如此复杂和令人困惑的事实。包装器可以做很多事情并不容易解决,但它们确实提供了许多常见用例的示例,例如显示视频或捕获帧。如果你想添加叠加层,或插入其他过滤器,它可以做到,但要预先警告它根本不是直截了当。

答案 2 :(得分:2)

看看这篇文章: http://www.codeproject.com/KB/miscctrl/webcam_c_sharp.aspx

这比安装和使用OpenCVNetWrapper简单得多。

答案 3 :(得分:0)

你试过Clipboard.GetImage()吗?您还可以尝试各种Clipboard.Contains *()方法,以查看数据存储在剪贴板中的格式。

答案 4 :(得分:0)

OpenCV捕获,EMGU捕获以及我尝试过的所有其他捕获库 都有同样的问题:你不能以编程方式高于640x480 (不打开Windows视频源窗口)。

我建议使用它(这确实有效):
https://github.com/ofTheo/videoInput

答案 5 :(得分:0)

此问题也在How to get web cam images in C#?中提出,您可能会发现以下内容有用(抱歉发送垃圾邮件,但这确实有助于回答问题):

我刚刚发布了我的Windows应用程序CamTimer的完整源代码(用.NET / C#编写)。在https://github.com/johanssonrobotics/CamTimer

下载/查看完整代码(包含有效的网络摄像头示例)

快乐的编码!