参考:C#使用OpenCVhttps://blog.csdn.net/sinat_37281674/article/details/119987327
测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp; //为了使用opencv
using Point = OpenCvSharp.Point; //为了确定我们使用的point是opencv的而不是draw的
using DVPCameraType;//相机SDK
namespace OpenCvSharpTest
{
class Program
{
public static IntPtr m_ptr = new IntPtr();
private static DVPCamera.dvpStreamCallback _proc;
private static Mat srcImage;
/*视频流回调函数*/
public static int _dvpStreamCallback(uint handle, dvpStreamEvent _event, IntPtr pContext, ref dvpFrame refFrame, IntPtr pBuffer)
{
//相机帧数据转成OpenCV的Mat图像
srcImage = new Mat(refFrame.iHeight, refFrame.iWidth, MatType.CV_8UC3, pBuffer);//彩色三通道图像使用CV_8UC3格式,黑白单通道使用CV_8UC1格式
Cv2.ImShow("Camera", srcImage);
Cv2.WaitKey(1);
return 0;
}
static void Main(string[] args)
{
dvpStatus status;//相机状态
uint m_handle = 0;//相机句柄
uint count = 0;//相机数量
status = DVPCamera.dvpRefresh(ref count);//刷新相机数量
status = DVPCamera.dvpOpen(0, dvpOpenMode.OPEN_NORMAL, ref m_handle);//打开相机
//注册视频流回调函数
_proc = _dvpStreamCallback;
status = DVPCamera.dvpRegisterStreamCallback(m_handle, _proc, dvpStreamEvent.STREAM_EVENT_PROCESSED, m_ptr);
status = DVPCamera.dvpStart(m_handle);//启动相机
while (true)
{
}
}
}
}
运行: