directshow怎样获取摄像头采集到的图像数据解决办法
展开全部
摄像头时,你有枚举设备,然后获取设备吗?
图片保存,一般用ISampleGrabber获取缓存。
pSampleGrabber->GetConnectedMediaType(&am_media_type); //检索采集卡输入的媒体类型
VIDEOINFOHEADER *pVideoInfoHeader = //数据格式
(VIDEOINFOHEADER *)am_media_type.pbFormat;
pSampleGrabber->SetBufferSamples(TRUE);
// 准备好buffer
long nBufferSize = am_media_type.lSampleSize; //定义一个long,存放样本大小。
long *pBuffer = (long *)malloc(nBufferSize); //指向nBufferSize的指针pBuffer。
// 将现在显示的图像获取为静止画面
pSampleGrabber->GetCurrentBuffer(&nBufferSize,
pBuffer);
//
// 保存到Bitmap。
// 此sample为了看到截图结果,
// 将其保存为Bitmap。
//
HANDLE fh;
BITMAPFILEHEADER bmphdr; //包含的信息的类型,规模和布局的文件
DWORD nWritten; //双字节
memset(&bmphdr, 0, sizeof(bmphdr)); //设置到指定的字符缓冲区(指针的目的地,字符集,字符数)
bmphdr.bfType = ('M' << 8) | 'B'; //按位或,为BM。
bmphdr.bfSize = sizeof(bmphdr) + sizeof(BITMAPINFOHEADER) + nBufferSize; //位图文件头数据(类型,大小),位图信息头数据(尺度),图片数据(每一个像素值。
bmphdr.bfOffBits = sizeof(bmphdr) + sizeof(BITMAPINFOHEADER); //位图数据起始位,在文件头和信息头之后。
fh = CreateFile(TEXT("result.bmp"), //创建文件名,写文件,不共享读写,缺省安全属性,如果文件存在,也创建,一般的文件,模板文件为空。
GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(fh, &bmphdr, sizeof(bmphdr), &nWritten, NULL); //文件句柄,读写数据缓冲区,多少数据要写入,已经写入多少数据,异步读写(大多使用NULL)
WriteFile(fh, //包含的信息类型,规模和布局的文件,图像的位图的颜色和尺寸信息,显示图像获取静止画面的数据)
&pVideoInfoHeader->bmiHeader,
sizeof(BITMAPINFOHEADER), &nWritten, NULL);
WriteFile(fh, pBuffer, nBufferSize, &nWritten, NULL);
CloseHandle(fh);
free(pBuffer);
图片保存,一般用ISampleGrabber获取缓存。
pSampleGrabber->GetConnectedMediaType(&am_media_type); //检索采集卡输入的媒体类型
VIDEOINFOHEADER *pVideoInfoHeader = //数据格式
(VIDEOINFOHEADER *)am_media_type.pbFormat;
pSampleGrabber->SetBufferSamples(TRUE);
// 准备好buffer
long nBufferSize = am_media_type.lSampleSize; //定义一个long,存放样本大小。
long *pBuffer = (long *)malloc(nBufferSize); //指向nBufferSize的指针pBuffer。
// 将现在显示的图像获取为静止画面
pSampleGrabber->GetCurrentBuffer(&nBufferSize,
pBuffer);
//
// 保存到Bitmap。
// 此sample为了看到截图结果,
// 将其保存为Bitmap。
//
HANDLE fh;
BITMAPFILEHEADER bmphdr; //包含的信息的类型,规模和布局的文件
DWORD nWritten; //双字节
memset(&bmphdr, 0, sizeof(bmphdr)); //设置到指定的字符缓冲区(指针的目的地,字符集,字符数)
bmphdr.bfType = ('M' << 8) | 'B'; //按位或,为BM。
bmphdr.bfSize = sizeof(bmphdr) + sizeof(BITMAPINFOHEADER) + nBufferSize; //位图文件头数据(类型,大小),位图信息头数据(尺度),图片数据(每一个像素值。
bmphdr.bfOffBits = sizeof(bmphdr) + sizeof(BITMAPINFOHEADER); //位图数据起始位,在文件头和信息头之后。
fh = CreateFile(TEXT("result.bmp"), //创建文件名,写文件,不共享读写,缺省安全属性,如果文件存在,也创建,一般的文件,模板文件为空。
GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(fh, &bmphdr, sizeof(bmphdr), &nWritten, NULL); //文件句柄,读写数据缓冲区,多少数据要写入,已经写入多少数据,异步读写(大多使用NULL)
WriteFile(fh, //包含的信息类型,规模和布局的文件,图像的位图的颜色和尺寸信息,显示图像获取静止画面的数据)
&pVideoInfoHeader->bmiHeader,
sizeof(BITMAPINFOHEADER), &nWritten, NULL);
WriteFile(fh, pBuffer, nBufferSize, &nWritten, NULL);
CloseHandle(fh);
free(pBuffer);
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
深圳量子动力
2024-10-28 广告
2024-10-28 广告
在量子动力(深圳)计算机科技有限公司,我们致力于将前沿技术融入安防与智能识别领域。摄像头人脸捕捉技术,依托深度学习算法与高效图像处理能力,能够在复杂环境中迅速锁定并精准捕捉人脸信息。这一技术不仅提升了监控系统的智能化水平,还在公共安全、门禁...
点击进入详情页
本回答由深圳量子动力提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询