在一个采集卡采集图像处理中,需要对采集到的视频做实时处理。用C#来调用C++的DLL,在DLL中,有一个用来获取一张图片到内存和获取图像格式头信息的3个函数:函数1:获取图像格式头信息LONG APIENTRY devwdm_GetBmpInfo(void *bmHdr);
函数2:获取采集一帧RGB24图像到内存LONG APIENTRY devwdm_GetImageBuffer(BYTE *pImageMem);
函数3:采集一帧YUY2图像数据到内存LONG APIENTRY devwdm_CopyImageYUVMem(BYTE *pMem);
我在C#中是这样调用的: [DllImport("devwdm.dll")]
//函数功能:采集一帧RGB24图像到内存 pImageMem:图像缓冲区指针
public static extern int devwdm_GetImageBuffer(IntPtr pImageMem); [DllImport("devwdm.dll")]
//函数功能: 采集一帧YUY2图像数据到内存
//pMem: 图像缓冲区指针
public static extern int devwdm_CopyImageYUVMem(IntPtr pMen); [DllImport("devwdm.dll")]
// //函数功能:获取图像格式头信息 bmHdr:图像格式头指针
public static extern int devwdm_GetBmpInfo(IntPtr bmHdr);问题是,如何用C#来对视频进行实时处理呀?从内存中读取图像吗?这样的话怎么处理?需要每秒采集几幅图像然后对其处理之后再动态显示出来,然后释放掉内存吗?我是菜鸟,实在不懂啊,还希望高手们不吝赐教,感激不尽啊!!!
在线等!!!
函数2:获取采集一帧RGB24图像到内存LONG APIENTRY devwdm_GetImageBuffer(BYTE *pImageMem);
函数3:采集一帧YUY2图像数据到内存LONG APIENTRY devwdm_CopyImageYUVMem(BYTE *pMem);
我在C#中是这样调用的: [DllImport("devwdm.dll")]
//函数功能:采集一帧RGB24图像到内存 pImageMem:图像缓冲区指针
public static extern int devwdm_GetImageBuffer(IntPtr pImageMem); [DllImport("devwdm.dll")]
//函数功能: 采集一帧YUY2图像数据到内存
//pMem: 图像缓冲区指针
public static extern int devwdm_CopyImageYUVMem(IntPtr pMen); [DllImport("devwdm.dll")]
// //函数功能:获取图像格式头信息 bmHdr:图像格式头指针
public static extern int devwdm_GetBmpInfo(IntPtr bmHdr);问题是,如何用C#来对视频进行实时处理呀?从内存中读取图像吗?这样的话怎么处理?需要每秒采集几幅图像然后对其处理之后再动态显示出来,然后释放掉内存吗?我是菜鸟,实在不懂啊,还希望高手们不吝赐教,感激不尽啊!!!
在线等!!!
通过图片虽然也可以,但是效果估计比较差。
你实在想做,提供2个思路:
1.知道视频的帧数/秒,然后用时钟循环,每秒抓取这么多的图像,并且每抓一张就把图像画到一个画布上。例如picturebox就行。当然,画图的技术要过关,使用GDI+不行的话,就是用DirectShow处理。就是你现在要实现的思路。
2.在实时视频上查看,当需要抓图的时候,调用抓图接口,抓取图片。