视频图像的截取问题!!! 请问各位大侠,如何在一段视频流中截取一帧一帧的图像?具体如何实现?多谢各位! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 VFW 采集图像有一个简单的方法: BOOL capFileSaveAs( hwnd, szName ); 直接把当前帧保存为 bmp 图像(对于 YUV 显示模式无效) 我现在要做的并不是单纯的截取某一帧图像然后保存到某个目录下,而是要把视频流的每一帧都截取下来(现在使用的是市场上买回来的视频服务器,厂家只提供了.DLL文件和部分函数的定义,具体的源码没有提供,请问我要是在此基础上进行食品视频帧的截取该如何做呢?) DWORD CVMR_Capture::ImageCapture(LPCTSTR szFile)//视频截图,拍摄的RAW图像位数24bits/pixel{ BYTE *pImage; DWORD dwSize,dwWritten; dwSize=this->GrabFrame (); this->GetFrame (&pImage); HANDLE hFile = CreateFile(szFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if (hFile == INVALID_HANDLE_VALUE) return FALSE; WriteFile(hFile, (LPCVOID)pImage , m_nFramelen, &dwWritten, 0); // Close the file CloseHandle(hFile); return dwWritten;}DirectShow或VMR里有这些功能。 class CVMR_Capture {public: int GetHeight(); int GetWidth(); BOOL SaveBMP( BYTE* Buffer, int width, int height, long paddedsize, const char* bmpfile ); long GetFramLength(); CVMR_Capture(); int EnumDevices(HWND hList); HRESULT Init(int iDeviceID,HWND hWnd,int iWidth,int iHeight); DWORD GetFrame(BYTE ** pFrame); BOOL Pause(); DWORD ImageCapture(LPCTSTR szFile); DWORD GrabFrame(); virtual ~CVMR_Capture(); protected: IGraphBuilder *m_pGB ; IMediaControl *m_pMC; IMediaEventEx *m_pME ; //IMediaEvent *pME ; IVMRWindowlessControl9 *m_pWC; IPin * m_pCamOutPin; IBaseFilter *m_pDF; PLAYSTATE m_psCurrent; int m_nWidth; int m_nHeight; BYTE *m_pFrame; long m_nFramelen; bool BindFilter(int deviceId, IBaseFilter **pFilter); HRESULT InitializeWindowlessVMR(HWND hWnd); HRESULT InitVideoWindow(HWND hWnd,int width, int height); void StopCapture(); void CloseInterfaces(void); void DeleteMediaType(AM_MEDIA_TYPE *pmt); bool Convert24Image(BYTE *p32Img,BYTE *p24Img,DWORD dwSize32);private: };这是头文件,你随便从里面截一段代码搜一下,就知道怎么回事了 组合框和数据库连接的问题 问一个关于dll方法调用和类型转换的问题 如何修改拦截到的数据包? 问一个函数名 在线等待…… 关于连续send数据的问题 关于VC写的ACTIVEX控件在delphi调用中的异常问题(500分求助) PSocket->close()与 delete pSocket有不同吗? 我打开了com1端口,是否意味着com2也被打开了? mfc程序怎样连接access数据库,最好能给出代码 alphagx送分了 请教图片如何圆角化? 退出程序时提示堆被破坏....
BOOL capFileSaveAs(
hwnd,
szName
); 直接把当前帧保存为 bmp 图像(对于 YUV 显示模式无效)
{
BYTE *pImage;
DWORD dwSize,dwWritten;
dwSize=this->GrabFrame ();
this->GetFrame (&pImage);
HANDLE hFile = CreateFile(szFile, GENERIC_WRITE, FILE_SHARE_READ, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if (hFile == INVALID_HANDLE_VALUE)
return FALSE; WriteFile(hFile, (LPCVOID)pImage , m_nFramelen, &dwWritten, 0);
// Close the file
CloseHandle(hFile);
return dwWritten;
}DirectShow或VMR里有这些功能。
{
public:
int GetHeight();
int GetWidth();
BOOL SaveBMP( BYTE* Buffer, int width, int height, long paddedsize, const char* bmpfile );
long GetFramLength(); CVMR_Capture();
int EnumDevices(HWND hList);
HRESULT Init(int iDeviceID,HWND hWnd,int iWidth,int iHeight);
DWORD GetFrame(BYTE ** pFrame);
BOOL Pause();
DWORD ImageCapture(LPCTSTR szFile);
DWORD GrabFrame();
virtual ~CVMR_Capture();
protected:
IGraphBuilder *m_pGB ;
IMediaControl *m_pMC;
IMediaEventEx *m_pME ;
//IMediaEvent *pME ;
IVMRWindowlessControl9 *m_pWC;
IPin * m_pCamOutPin;
IBaseFilter *m_pDF; PLAYSTATE m_psCurrent; int m_nWidth;
int m_nHeight; BYTE *m_pFrame;
long m_nFramelen;
bool BindFilter(int deviceId, IBaseFilter **pFilter);
HRESULT InitializeWindowlessVMR(HWND hWnd);
HRESULT InitVideoWindow(HWND hWnd,int width, int height);
void StopCapture();
void CloseInterfaces(void);
void DeleteMediaType(AM_MEDIA_TYPE *pmt);
bool Convert24Image(BYTE *p32Img,BYTE *p24Img,DWORD dwSize32);private:
};这是头文件,你随便从里面截一段代码搜一下,就知道怎么回事了