我想使用 EDSDK 实现实时取景功能。我使用 EdsGetPointer 来获取内存流的内存地址指针。现在我想在 PC 上显示流媒体图像。
我读过一些人使用VisualC上的API,例如ATL或CImage,它们只需将内存流的指针作为参数传递就可以显示流图像,并且该函数可以自行检索流图像。我正在考虑使用 OpenCV 来显示流图像,因为我的计算机上没有安装 VisualC。我可以使用 OpenCV 上的任何功能来显示流图像吗?或者我可以使用其他替代方法来处理来自 EDSDK 的流图像吗?
您可以将数据打包成一个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++ 的付费版本。
你想要 LiveView 吗?如果不是实时取景,您可以使用将流媒体图像保存在主机中
Error = EdsCreateFileStream(dirItemInfo.szFileName, EDSDK.EdsFileCreateDisposition.CreateAlways, EDSDK.EdsAccess.ReadWrite, out stream);
然后你可以加载它
IplImage *inImg = cvLoadImage("photo2.jpg");
然后可以在opencv中处理图像。