DirectShow 图像翻转

zhuyf87 2013-05-15 09:50:12
问题背景:有一台类似于ATM的自助设备,现在需要有视频预览、拍照,将照片上传到服务器的功能。
其中摄像头的预览、拍照根据陆其明老师《DirectShow实物精选》的源码程序AVCap修改,已经可以正常工作。
我的系统是Win7,开发环境是vc2010。

具体问题:现在的问题是,由于模具存在问题。摄像头在安装的时候,上下倒置。导致预览出来的图像是上下翻转。如果不考虑模具修改,现在想从软件上将图像进行上下翻转(美图拍拍软件里面有这个功能)。

解决方法:由于项目时间比较紧,以前在DirectShow这也没有知识积累。不清楚如何解决。google出以下两个解决办法。
(1):“什么叫左右互反呢,一般摄像头获取的图像,就是从摄像头位置观察方向的图像,不是你双眼的观察方向,如果确实要左右互反过来,那写个filter处理下sample就行了。”

现在这个实现上下翻转的filter我已经弄出来了。(也是网络搜索的程序,然后自己修改的)。并且在机器上注册成功。但现在不知道如何将这个翻转filter集成到AVCap中。也就是如何使用这个filter,该将这个filter添加到哪里去?

(2)“如果只需要预览时左右翻转过来,调用video render的IVMRMixerControl::SetOutputRect()”
请问大家,这种解决办法,是修改DirectShow源码吗?然后重新编译lib?我在DirectShow源码的VMR目录下没有找到IVMRMixerControl::SetOutputRect()。

上面是我的问题。希望大家帮忙指导,谢谢大家。如果问题能够解决,我把所有可用分都给您。
(版主能帮忙把这个问题置顶吗?^_^)
...全文
696 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoliba007 2013-10-17
  • 打赏
  • 举报
回复
帮顶,我以前做过用directshow的sampleGrabber取每帧的图像数据,然后用StretchDIBits刷出来显示在主窗口上,因为图像显示是反的,刚刚好可以用StretchDIBits的坐标进行一下翻转就行了,不过楼主要的就是翻转,那根本就不用再做反的操作了。
shore1000 2013-05-25
  • 打赏
  • 举报
回复
directshow不是有个sampleGrabber么?可以回调每祯图片的图像数据,你做处理在这做处理 然后直接render不是就可以了么?
zjidong007 2013-05-17
  • 打赏
  • 举报
回复
不明觉厉
逆天小北鼻 2013-05-17
  • 打赏
  • 举报
回复
我要向你学习
逆天小北鼻 2013-05-17
  • 打赏
  • 举报
回复
引用 4 楼 zhuyf87 的回复:
今天太忙了,找时间会接着弄这个。希望有更多的朋友回帖啊。
你好认真学习
逆天小北鼻 2013-05-17
  • 打赏
  • 举报
回复
引用 8 楼 zhuyf87 的回复:
[quote=引用 6 楼 shutingwang 的回复:] 我要向你学习
小比鼻,你咋不加我扣扣呢。[/quote]加你微博。
zhuyf87 2013-05-17
  • 打赏
  • 举报
回复
项目时间太紧了,这个问题先搁置。过10天左右再回来接着搞。
zhuyf87 2013-05-17
  • 打赏
  • 举报
回复
引用 6 楼 shutingwang 的回复:
我要向你学习
小比鼻,你咋不加我扣扣呢。
zhuyf87 2013-05-15
  • 打赏
  • 举报
回复
引用 1 楼 xxwy89 的回复:
1)感觉你这个filter应该在插入在AVCap后面对采集的图像处理下 2)IVMRMixerControl是video render的一个接口,SetOutputRect()是接口函数。如下: hr = pVideoRender.CoCreateInstance( CLSID_VideoMixingRenderer9); CComPtr<IVMRMixerControl> Iv; pVideoRender->QueryInterface(IID_IVMRMixerControl, (void**)&Iv); Iv->SetOutputRect(*,*);
哦。是这样。
zhuyf87 2013-05-15
  • 打赏
  • 举报
回复
自己顶一下。
xxwy89 2013-05-15
  • 打赏
  • 举报
回复
1)感觉你这个filter应该在插入在AVCap后面对采集的图像处理下 2)IVMRMixerControl是video render的一个接口,SetOutputRect()是接口函数。如下: hr = pVideoRender.CoCreateInstance( CLSID_VideoMixingRenderer9); CComPtr<IVMRMixerControl> Iv; pVideoRender->QueryInterface(IID_IVMRMixerControl, (void**)&Iv); Iv->SetOutputRect(*,*);
zhuyf87 2013-05-15
  • 打赏
  • 举报
回复
今天太忙了,找时间会接着弄这个。希望有更多的朋友回帖啊。

19,469

社区成员

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

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