如何在 OpenCV 中显示流图像?
Posted
技术标签:
【中文标题】如何在 OpenCV 中显示流图像?【英文标题】:How to display streaming images in OpenCV? 【发布时间】:2011-10-11 14:20:06 【问题描述】:我想使用 EDSDK 实现实时取景功能。我使用 EdsGetPointer 来获取内存流的内存地址指针。现在我想在 PC 上显示流媒体图像。
我读到有人使用VisualC上的API,例如ATL或CImage,只需将内存流的指针作为参数传递就可以显示流图像,并且该函数可以自行检索流图像。我正在考虑使用 OpenCV 来显示流图像,因为我的计算机上没有安装 VisualC。我可以使用 OpenCV 上的任何功能来显示流图像吗?或者我可以使用其他替代方法来处理来自 EDSDK 的流式图像吗?
【问题讨论】:
【参考方案1】:您可以将数据打包到 IplImage
并在循环中使用 cvShowImage
显示:http://opencv.willowgarage.com/documentation/user_interface.html 缺点是您被绑定到 OpenCV 事件循环中。
还有其他选择。过去,我使用 OpenGL 将图像绘制为纹理,以便我可以管理视口、在其上绘制等。使用 GLUT 可以快速获得简单灵活的工作 GUI。这样做的好处是,您编写的任何 OpenGL 代码都可以移植到您使用的任何其他 UI 库,只要该库具有 OpenGL 画布小部件。我总是做的是Camera->IplImage->OpenGL Texture->wxWidgets glCanvas。我仍然使用 OpenCV 进行实际的图像处理等。它完全是跨平台的,不需要 VC++ 的付费版本。
【讨论】:
openCV 中的图像显示功能实际上只是“足够好”以查看图像处理的结果,您不会将它们用于视频播放器之类的东西。跨度> 【参考方案2】:你想要 LiveView 吗?如果不是实时取景,您可以将流媒体图像保存在主机中 使用
Error = EdsCreateFileStream(dirItemInfo.szFileName, EDSDK.EdsFileCreateDisposition.CreateAlways, EDSDK.EdsAccess.ReadWrite, out stream);
然后你就可以加载它了
IplImage *inImg = cvLoadImage("photo2.jpg");
然后就可以在opencv中处理图片了。
【讨论】:
以上是关于如何在 OpenCV 中显示流图像?的主要内容,如果未能解决你的问题,请参考以下文章