求助:关于视频的存储问题!

kaixinachongyou 2010-08-13 01:06:29
我现在做一个项目,就是用视频采集卡采集摄像头的数据,视频采集卡具有SDK二次开发的功能,我需要在视频采集卡的回调函数中加入算法对视频进行处理,显示窗口有两个,一个是显示原视频窗口,一个是显示处理后的视频,原视频可以通过采集卡提供的函数存储,但处理后的视频我就不知道怎么存储了!
下面是我在回调函数写的程序:
指针plnfo是指向从摄像头采集的视频流帧的DIB的BITMAPINFO头的,pBits指向点矩阵数据。
我现在就是把pBits指向的点矩阵数据按照算法对每个像素点进行处理并存到预先分配的内存空间GrayImage中,并显示出来!怎么才能将内存空间GrayImage中数据以视频的形式存储起来!
请老师看看我的程序,并给我提出点建议,看能不能有其他比较简单的方法把处理后的视频存储到硬盘中去!学生感激万分!求求老师给点建议!
void CShowStreamDlg::ShowStream(const BITMAPINFO * pInfo, const BYTE * pBits)
{
if(!pInfo || !pBits)
return;
HDC hdc = ::GetDC(m_hWnd);
int w = pInfo->bmiHeader.biWidth;
int h = pInfo->bmiHeader.biHeight;
int Gray;
BYTE*GrayImage=(BYTE*)(new BYTE[w*h*4]);
SetStretchBltMode(hdc, COLORONCOLOR);
for(i=0;i<h;i++)
for(int j=0;j<w;j++)
{
Gray=(pBits[i*3*w+j*3+0]*11+pBits[i*3*w+j*3+1]*59+pBits[i*3*w+j*3+2]*30)/100;
GrayImage[i*3*w+j*3+0]=Gray;
GrayImage[i*3*w+j*3+1]=Gray;
GrayImage[i*3*w+j*3+2]=Gray;
}
StretchDIBits(hdc,
0, 0, WIDTH, HEIGHT,
0, 0, w, h,
GrayImage, pInfo, DIB_RGB_COLORS, SRCCOPY);
::ReleaseDC(m_hWnd, hdc);
}
...全文
102 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
runafteryou 2010-08-16
  • 打赏
  • 举报
回复
DirectShow技术可以解决你这个问题。但是你这个解决方案本身有问题,
在视频卡的回调函数里不应当做比较复杂的处理工作。
处理好的灰度图像可以用ffdshow Encoder进行实时压缩。
kaixinachongyou 2010-08-15
  • 打赏
  • 举报
回复
行,我的邮箱是tanchaoacl2005@163.com,请你把你的原代码发个我看看吧,谢谢你了!
xiaoyilong19 2010-08-13
  • 打赏
  • 举报
回复

你可以先把获取的图像数据,转化成bmp内存位图的格式,然后用这个库来进行连续压缩
xiaoyilong19 2010-08-13
  • 打赏
  • 举报
回复
你要怎么弄,我有一个把连续单帧的bmp图片压缩成mpeg1,mpeg2格式的源代码,你要的话,可以给你看看,做参考,感觉你这个问题,和我之前遇到的差不多

19,469

社区成员

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

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