22

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

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

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库。它支持从网络摄像头捕获帧:

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

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

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

于 2008-10-24T17:08:20.043 回答
7

实际上有两种方法可以将相机数据导入您的应用程序,DirectShow 和 WIA。Microsoft 建议您使用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

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

于 2008-10-24T14:50:44.517 回答
0

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

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

于 2011-02-15T17:22:37.283 回答
0

这也被问到如何在 C# 中获取网络摄像头图像?您可能会发现以下内容很有用(很抱歉发送垃圾邮件,但这确实有助于回答问题):

我刚刚发布了我的 Windows 应用程序 CamTimer 的完整源代码(用 .NET/C# 编写)。在https://github.com/johanssonrobotics/CamTimer下载/查看完整代码(带有工作网络摄像头示例)

快乐编码!

于 2012-07-26T08:58:28.033 回答