vfw问题

lijianxian 2003-09-15 10:04:18
请问如何将摄像头的图像截取下来,多谢了
...全文
85 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijianxian 2003-09-16
  • 打赏
  • 举报
回复
已经是RGB24了
mct1025 2003-09-16
  • 打赏
  • 举报
回复
摄像头图像格式改为RGB24,试试
lijianxian 2003-09-16
  • 打赏
  • 举报
回复
我在回调函数中写的东西如下:
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=sizeof(BITMAPFILEHEADER) + lpVHdr->dwBufferLength;
bfh.bfOffBits=sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO);

fp=fopen("./out.bmp","wa");
fwrite(&bfh,1,sizeof(BITMAPFILEHEADER),fp);
fwrite(lpVHdr->lpData,1,lpVHdr->dwBufferLength,fp);
fclose(fp);
执行后得到文件了,但是不能读,文件大小大约五六十k.你能否给指正一下
mct1025 2003-09-16
  • 打赏
  • 举报
回复
用FILE *stream;

fopen,fwrite,fclose
lijianxian 2003-09-16
  • 打赏
  • 举报
回复
还是不行,我的程序是win 32 API的,连添加CFile类都困难呀
mct1025 2003-09-16
  • 打赏
  • 举报
回复
lpVHdr->lpData指向一个DIB数据,含有BITMAPINFO
lpVHdr->dwBufferLength是DIB数据长度
VIDEOHDR这个结构体,不需要再申明了
保存成bmp文件时,还需要加一个BITMAPFILEHEADER

BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=sizeof(BITMAPFILEHEADER) + lpVHdr->dwBufferLength;
bfh.bfOffBits=sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO);
CFile bf;
if(bf.Open(sBmpFileName,CFile::modeCreate|CFile::modeWrite))
{
bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
bf.WriteHuge(lpVHdr->lpData,lpVHdr->dwBufferLength);
bf.Close();
}
我现在没有摄像头,你自己试试吧
lijianxian 2003-09-16
  • 打赏
  • 举报
回复
mct1025你好
我按照你的方法试了一下,还是读不出图像
我请问一下是如何处理VIDEOHDR这个结构体
也就是说要不要申明它一下,在那个函数里
用一下等等,请指教
lijianxian 2003-09-16
  • 打赏
  • 举报
回复
成功了!非常感谢你的帮助,我是刚刚出来工作的学生,
现在在做摄像头方面的工作,缺乏实际经验。能跟你认识
一下吗,我知道你在这方面肯定很有经验,我的QQ号是
252842707,很高心你能成为我的朋友。谢谢
mct1025 2003-09-16
  • 打赏
  • 举报
回复
忘记加入BITMAPINFO了,抱歉

BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) + lpVHdr->dwBufferLength;
bfh.bfOffBits=sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO);

BITMAPINFO bmInfo;
capGetVideoFormat(hWndCap,&bmInfo,capGetVideoFormatSize(hWndCap));

FILE *fp;//还有一点问题,图像扭曲,fwrite我不太熟悉,你再试一下吧
fp=fopen("./out.bmp","wa");
fwrite(&bfh,1,sizeof(BITMAPFILEHEADER),fp);
fwrite(&bmInfo,1,sizeof(BITMAPINFO),fp);
fwrite(lpVHdr->lpData,1,lpVHdr->dwBufferLength,fp);
fclose(fp);

CFile bf;//用CFile没有问题
if(bf.Open("./out.bmp",CFile::modeCreate|CFile::modeWrite))
{
bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bmInfo,sizeof(BITMAPINFO));
bf.WriteHuge(lpVHdr->lpData,lpVHdr->dwBufferLength);
bf.Close();
}
mct1025 2003-09-15
  • 打赏
  • 举报
回复
//登记回调函数
capSetCallbackOnFrame(ghWndCap, (FARPROC)FrameCallbackProc);

capGrabFrame(ghWndCap); //捕获单帧图像

LRESULT CALLBACK FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
  if (!ghWndCap)
   return FALSE;

  //假设fp为一打开的文件指针
  fwrite(fp,lpVHdr->lpData,lpVHdr->dwBufferLength,1);
  return (LRESULT) TRUE ;
}

WM_CLOSE//取消所登记的回调函数
capSetCallbackOnFrame(ghWndCap, NULL);
flinming 2003-09-15
  • 打赏
  • 举报
回复
读取图象数据,写成bmp文件
lijianxian 2003-09-15
  • 打赏
  • 举报
回复
我想问的是用哪一个API函数可以将某一视频窗口的图像抓下来,并保存到
某个.jpg或.bmp文件中。请各位高手指点。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧