- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,让我发布一些我通过 Google 发现的类似 SO 问题的链接。第一个链接似乎确实有一个有效的答案,但它并没有直接解决我的问题。第二个链接确实直接解决了我的问题,但 gdh 的回复似乎对我没有帮助。
Canon LiveView: image convertion to OpenCV Mat
Canon EDSDK How can I get width and height of live view images?
我正在尝试使用佳能的 EDSDK 在实时取景模式下从我的 Canon Rebel 下载图像。我能够打开流并连续下载数据流,但我感到困惑的是如何将该数据转换为可用图像。最终我的目标是通过 glTexSubImage2D 将实时取景图像直接上传到 OpenGL 纹理中,但我不清楚如何获取图像位深度、颜色格式和尺寸。
请允许我发布一些示例代码;请记住,这是我的工作代码的精简示例 - 我省略了一些细节,例如启动流、获取相机引用或释放任何引用,实际上下载和 OpenGL 调用发生在不同的线程上。
// All my variables
EdsStreamRef evfStream = nullptr; // evf datastream
EdsImageRef evfImg = nullptr; // image ref
EdsCameraRef camRef = nullptr; // camera ref
void * pData = nullptr; // Pointer to image data
EdsUInt64 uLength( 0 ); // Size in bytes of image data
GLuint uGLTexID( 0 ); // Handle to OpenGL texture
EdsSize imgSize{0}; // Width, height of image
GLuint uClrFmt = GL_RGB; // Color format of image
GLuint uClrType = GL_UNSIGNED_BYTE; // Color data type of image
//////////////////////////////////////////////////////////////////////
// Get image from camera
// Create memory stream, init size to 1 byte for now
EdsCreateMemoryStream( 1, &evfStream );
// Create an image ref from the streawm
EdsCreateEvfImageRef( evfStream, &evfImg );
// Download the image (which I believe resizes the stream)
EdsDownloadEvfImage( camRef, evfImg );
// Get data size and pointer
EdsGetLength( evfStream, &uLength );
EdsGetPointer( evfStream, &pData );
//////////////////////////////////////////////////////////////////////
// Get image info
// This doesn't seem to be correct, using these dimensions causes a crash
EdsGetPropertyData( m_WriteImg.imgRef, kEdsPropID_Evf_CoordinateSystem, 0, sizeof( EdsSize ), &imgSize );
// How do I get these two?
uClrFmt = GL_RGB;
uClrType = GL_UNSIGNED_BYTE;
//////////////////////////////////////////////////////////////////////
// Upload to GPU
// If this is the first time, create the texture
bool bFirstTime = true;
if ( bFirstTime )
{
//Generate the device texture and bind it
glGenTextures( 1, &uGLTexID );
glBindTexture( GL_TEXTURE_2D, uGLTexID );
//Upload host texture to device
glTexImage2D( GL_TEXTURE_2D, 0, uClrFmt, imgSize.width, imgSize.height, 0, uClrFmt, uClrType, pData );
// Unbind
glBindTexture( GL_TEXTURE_2D, 0 );
bFirstTime = false;
}
// Otherwise update the existing texture
else
{
// Bind texture
glBindTexture( GL_TEXTURE_2D, uGLTexID );
// Upload image
glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, imgSize.width, imgSize.height, uClrType, uClrFmt, pData );
// Unbind
glBindTexture( GL_TEXTURE_2D, 0 );
}
缺少的部分是如何获取实际图像及其属性。 EDSDK 示例以及 OpenCV 相关问题确实提供了如何将该数据转换为可用图像的示例,但两者都涉及使用另一个库将数据放入可用图像中。
在EDSDK的例子中,GDI+被用来创建一个CImage对象。我可以在调试器中看到创建的 CImage 的位深度为 24,尺寸为 1056x704(或类似尺寸),但我不知道如何检索数据。
最让我困惑的是 uLength 变量,它是数据流的字节大小,并没有保持不变(它似乎每次都有相对较小的变化。)如果实际图像大小似乎保持不变?
无论如何,我们将不胜感激。我可以尝试使用基于库的解决方案,但我正在努力保持尽可能低的延迟。如果我可以提供更多信息,或者如果您想查看我的实际代码(以防出现问题),请告诉我。
谢谢,
约翰
最佳答案
据我所知,没有获取实时取景大小的功能,也没有必要。您下载的实时取景框是标准的 jpg,因此您可以通过阅读其标题来了解尺寸。我不知道 OpenCV 或 OpenGL 如何处理 jpg 图像,但我确信如果它们支持读取该格式,则有一些功能。否则,您可以使用众多 jpg 库之一。jpg 压缩也解释了为什么帧之间的图像大小不同。
通过使用 kEdsPropID_Evf_CoordinateSystem 调用 EdsGetPropertyData,您实际得到的是实时 View 坐标系大小。这绝对不是实时取景尺寸。我认为它更接近于照片尺寸,但我对此并不完全确定。
关于c++ - 如何获取 EVF LiveView 图像的尺寸和格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39428401/
有没有办法使用 Clojure format(基于 java.util.Formatter)或 cl-format(基于 Common Lisp 的format) 以编程方式设置空格填充?如果您事先知
我正在尝试创建一个用户实体以及数据/文件(pdf格式)。上传并保存到数据库很好,但是当我让用户进入 postman 时尝试发送获取请求方法,然后在数据字段中显示一些糟糕的数据,而且我无法在数据库中看到
我必须将值为 {"STX","ETX"} 的普通字符串数组转换为十六进制值,并且我应该根据 http://www.asciitable.com/ 得到 {2,3} . 最佳答案 听起来你想要一个 Ma
我想格式化我的代码,但不确定哪种格式类型最适合我的项目需要。 我发现仅对于 dart 和 flutter 项目(我都有),有不止一个选项可用于格式化编程语言/框架中预先构建的代码。 Dart : da
我已经尝试了多个代码,例如这样 Sub DateFixer() Application.ScreenUpdating = False Application.Calculation =
SolrQuery query = new SolrQuery(); query.setQuery("*:*"); query.add("wt","csv"); server.query(query)
我有一个包含多个字符串的数据库,我从查询中获取了这些记录,并且我在 QString 中收到了这种格式的数据: "Mon, 13 Nov 2017 09:48:45 +0000" 所以,我需要根据文化来
我有一个 Delphi 2007 DBGrid,我想让用户以更新的 Excel 格式 (OOXML) 保存它,但我的标准是用户不需要安装 Excel。有没有人知道任何已经这样做的组件?是的,我已经搜索
我正在我们的普通 html 站点旁边创建一个移动站点。使用 rails 3.1。移动站点在子域 m.site.com 中访问。 我已经定义了移动格式(Mime::Type.register_alias
我正在尝试使用 xmlstarlet 格式化 xml 文件,但我不想创建新的 xml 文件。 我试过了 xmlstarlet fo --inplace --indent-tab --omit-decl
我在 A 列中有一个带有文本的电子表格。 例如 A1=MY TEXT1 A2=MY TEXT2 A3=MY TEXT3 A4=MY TEXT4 A5=MY TEXT5 我想在文本的前后添加撇号 结果是
我想做一些源代码转换(自动导入列表清理),我想保留注释和格式。我听说过一些关于解析器这样做的事情,我认为是 ghc 解析器。 看起来我可以通过从文件中提取内容来使用 hs-src-exts Langu
我在 Excel 中工作,我想根据另一张表中的列表找出一张表中是否有匹配项。 我已将值粘贴到列表中,并希望从另一张表中返回它们的相应值。包含字母和数字的单元格可以正常工作(例如:D5765000),但
我有一个 DurationField在我的模型中定义为 day0 = models.DurationField('Duration for Monday', default=datetime.time
我正在为我的应用程序开发 WMI 查询。它需要为给定的 VID/PID 找到分配的虚拟 COM 端口。使用 WMI Code Creator 我发现...... 命名空间:root\CIMV2 类:W
我试图弄清楚如何使用 NSTextList,但除了 this SO question 之外,在网上几乎没有找到有用的信息。和 the comment in this blog . 使用这个我已经能够创
我要查询all_objects表在哪里last_ddl_time='01 jan 2010'但它拒绝日期格式... 任何机构给我查询的确切格式? 最佳答案 正如 AKF 所说,您应该使用 Trunc除
我试图在我的应用程序中实现聊天功能。我使用了 2 个 JEditorPane。一个用于保存聊天记录,另一个用于将聊天发送到前一个 JEditorPane。 JEditorPane 是 text/h
我在大学里修了一个编译器类(class),内容非常丰富,很有趣,尽管也很多工作。既然给了我们要实现的语言规范,所以我学不到的一件事就是语言设计。我现在正在考虑创建一种有趣的简单玩具语言,以便我可以玩耍
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我是一名优秀的程序员,十分优秀!