问题标签 [canon-sdk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
678 浏览

c# - edsdk c# pinvoke function EdsCreateMemoryStream 使堆栈不平衡

我正在开发小型摄影应用程序,它应该与佳能 EDSDK api 和 EOS 相机一起使用。旧 dll(从 2014 年开始)和旧相机佳能 1100D 和 1200D 一切正常。最近我购买了继任者,型号 1300D。当然,旧的dll(2014)无法识别2016年以来的新型号相机,我无法连接到相机。

所以我替换了旧的 dll:EDSDK.dll 和 EdsImage.dll

新的,取自上一个佳能 EOS Utility 版本 3,适用于佳能 1300D。

现在,我的相机被识别了,在我的主面板上我可以看到连接的相机的名称,佳能 EOS 1300D。

但是在替换 dll 之后,当我尝试从相机开始实时取景时,我收到了这个奇怪的错误消息:

调用 PInvoke 函数 'testApp!EDSDKLib.EDSDK::EdsCreateMemoryStream' 使堆栈失衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配

我将非常感谢任何帮助。我已经在这方面浪费了很多时间。我没有任何想法了,我不知道我应该在哪里寻找答案。

提前谢谢大家。

0 投票
1 回答
292 浏览

java - 佳能相机在一段时间后卡住 - 1200D EOS sdk java

我们正在使用佳能 eos sdk 2.14 进行直播和拍摄。相机是佳能1200D

以下是相机设置:

直播模式:启用

自动对焦模式:灵活

下面是代码

在上面的代码中,我有两种方法

  1. startCameraLive()
  2. onFaceCapture()

首先,我开始实时取景并连续显示下载的图像,当用户单击捕获按钮时,将执行第二种方法。这两种方法都被调用如下

像这样的第二种方法

现在问题 ::::

经过 5 或 6 次迭代后,相机卡住了,没有任何功能。一切都冻结了,关闭应用程序并重新启动应用程序后它不起作用。我们需要拔下相机或手动按下相机上的拍摄按钮才能重新开始工作。

一开始设置为启用的直播模式自动变为禁用。我们需要重新设置它。

在 startCameraLive() 我们设置 :::

camera.setFocusMode(Mode.AUTO);

camera.setLiveViewMode(true);

但是当相机卡住时,实时取景模式仍然被禁用。

我们怎样才能摆脱这个卡住,我们想知道这个问题的根本原因是什么。根本没有例外:(

请帮忙...

0 投票
2 回答
530 浏览

c# - 佳能 SDK 向后兼容性

我开发了一些供内部使用的照片应用程序,通过佳能 EOS SDK 2.13 与佳能 5D Mark II 一起使用。至于现在,我已经尝试将 SDK 升级到 3.5。该应用程序完全被破坏了(例如,当我尝试打开实时取景时,相机将快门打开关闭并且不发送实时取景流)。所以,我有一些问题。1、Canon EOS SDK 3.5是否向后兼容Canon 5D Mark II?2. 在 64 位 Windows 下,我还能使用 32 位 SDK 和基于 .NET Framework 的 32 位应用程序吗?3. 使用 3.5 SDK 的 C# 代码与 2.13 相比是否有一些变化?先感谢您。

0 投票
1 回答
484 浏览

c# - 现场绿屏

我使用佳能 EOS SDK 并希望通过相机流实现实时绿屏。

我有一个带有像素操作优化的简单绿屏算法。

对于 800x600 图片,这在我的 i5 上大约需要 300 毫秒。当然,这对于流畅的直播来说还不够快。

我有哪些优化选项?有机会使用 gpu 功能吗?会有什么机会?我不能在佳能相机上使用 DirectShow(不存在驱动程序)

0 投票
0 回答
2738 浏览

c++ - 使用 OpenCV 对 Canon CR2 图像进行 DeBayering

我要做的是读取我的佳能 Rebel T5 1200D 上拍摄的 .cr2 RAW 文件。我可以使用 LibRaw 和 OpenCV 加载和显示图像,但是与我在 Windows 中打开文件时相比,图像看起来有点太亮并且更黄。图片本身在帖子的底部。有人问了几个类似的问题:

使用 LibRaw 正确解码 CR2 图像?

使用 OpenCV 将 12 位拜耳图像转换为 8 位 RGB

我将首先发布我的所有代码,然后进入问题的细节。

我首先使用 LibRaw 打开并解压缩原始图像文件。这个例子在 LibRaw 的网站 http://www.libraw.org/docs/API-overview-eng.html

表示我将留下一个“图像”,其中每个像素是实际的 4 个 ushort 值 [Red, Green1, Blue, Green2] 代表该像素处的拜耳颜色。当我打印出值时(使用以下代码)

我得到以下结果:

因此,在偶数行上,红色和绿色 1 像素交替具有非零值,而在奇数行上,蓝色和绿色 2 像素交替具有非零值。这些值似乎是 12 位的,尽管我不是 100% 的。

看OpenCV的cvtColor函数的描述

http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html#cvtcolor

以及这个人对一些cr2颜色格式的描述:

http://lclevy.free.fr/cr2/#interpol

向我表明我有一个“BG”品种的拜耳图像(按照 OpenCV 文档中使用的术语。)

因此,为了将该图像传递给 cvtColor,我必须从解压缩的原始图像中获取每个像素值,并创建一个无符号短裤的连续图像。// 获取像素 idx int idx = y * width + x;

一旦我得到了一个连续的短裤缓冲区(vBayerData),我就构建了一个opencv mat并使用CV_BayerBG2RGB对其进行debayer。

然而,看看我打印出来的像素值告诉我​​这些值可能是 12 位的(虽然我不完全确定。)所以我必须从 12 位范围到 16 位范围,我相信相当于将这些值乘以 16。

毕竟,这是我留下的图像: OpenCV 输出

然而,这是我的眼睛看到的(抱歉缩放,颜色才是最重要的):

我在 Windows 中看到的

我觉得我离这里很近,但我得到的图像有点太亮而且颜色有点偏。我的相机上的设置是使用 sRGB 格式导出 RAW 图像,所以我确信对图像强度应用某种伽玛校正会有所帮助,但我似乎无法得到正确的图像。

我尝试了不同的拜耳矩阵(即 RG)、不同的位深度转换、在进行位深度转换时重新排列(在 DeBayering 之前和之后),但似乎都没有使图像正确显示。

有人认识这种变色吗?如果是这样,他们可以帮助我找到我的代码中的错误吗?

感谢您的阅读,

约翰

PS 我知道这里有很多文字,我不确定这种帖子的最佳格式是什么。我只是想提供我正在使用的所有信息。

编辑:正如 Mark Ransom 下面建议的那样,我认为这是由于白平衡不正确造成的。我被指出了数码相机颜色管道的方向,解码图像不仅仅是 debayer 步骤。

来自维基百科文章:

典型组件包括图像传感器校正(包括“去拜耳”或应用拜耳滤镜)、降噪、图像缩放、伽马校正、图像增强、色彩空间转换(在 RGB、YUV 或 YCbCr 等格式之间)、色度二次采样、帧率转换、图像压缩/视频压缩(如JPEG),计算机数据存储/数据传输。

0 投票
1 回答
835 浏览

edsdk - C++ 中的佳能 EDSDK 多线程

我尝试在 C++ 中添加多标题到 edsdk 开发。但是在“takePictures()”中执行“takeSinglePicture()”时代码卡住了,相机甚至不会拍一张照片。如何解决这个问题。代码在这里。

0 投票
1 回答
307 浏览

c++ - 佳能 EDSDK 录制超过 30 分钟

我有一台佳能相机,我正在使用佳能的 EDSDK 将实时视频渲染到 PC。我知道数码单反相机不能录制超过 30 分钟,那么有没有办法使用 SDK 让相机打破 30 分钟的障碍?

0 投票
1 回答
461 浏览

windows-10 - 是否有在 Windows 10 下运行的 Canon SDK 版本?

我有一个使用佳能 SDK 的应用程序。升级到 Windows 10 后,出现错误

有解决办法吗?

0 投票
1 回答
1157 浏览

edsdk - 佳能 EDSDK:在 LiveView 中拍照永远破坏 LV

我的应用程序使用 C# 和相当轻量级的 EDSDKWraper (我已经修改了一点)来控制相机。我基本上已经可以控制一切,例如 LiveView、对焦(自动 + 手动)、设置和读取各种属性和拍摄图片,可选择使用自动对焦包围/堆叠。

但是,有一个问题:当我启动 LiveView 然后使用标准方式拍照时

它有效,我可以下载图片或使用Download+DownloadCompleteDownloadCancel功能取消下载。不幸的是,在那之后不可能再获得 LiveView 图像,DownloadEvfImage返回OBJECT_NOT_READY并让它永远返回。

唯一的出路是停止并再次启动 LiveView 或使用DoEvfAF命令启动 LiveView 自动对焦。但我想避免这种情况。

这发生在佳能 5D Mark IV 和 5D Mark III 上,同样的问题也发生在完全不同的 C# 框架上,我刚刚从网上下载了一个不同的示例。EOS Utility 似乎工作正常,所以似乎有某种方法。

“LiveView + 拍照 + LiveView 再次”甚至可以在您的应用程序中使用,无论是 C# 还是 C++?我需要执行一些技巧吗?

我已经花了很多时间试图找出一个错误,比如没有发布数据,并在网上搜索答案,但到目前为止还没有运气。

0 投票
1 回答
391 浏览

c# - EdsCreateImageRef() 方法给出 EDS_ERR_FILE_FORMAT_UNRECOGNIZED

我的目标是使用佳能 EDSDK 3.4 将佳能 EOS 70D 拍摄的 RAW 图像保存为 .tif 文件,用于 WPF 应用程序。有人提到,此版本支持 RAW 图像处理。

从我的搜索中,我发现无法从相机中获取图像对象,因此您必须首先将图像下载到主机 PC,然后尝试读取文件以进行进一步处理并使用方法 EdsSaveImage( )。这是我拥有的代码。

因此,在代码的最后一部分中,我在 PC 上保存了 .CR2 格式的图像,并尝试使用EdsCreateFileStream(dirItemInfo.szFileName, EdsFileCreateDisposition.OpenExisting, EdsAccess.Read, out instream);

然后当我尝试使用err = EdsCreateImageRef(instream, out imgref);创建图像对象时,错误代码显示 EDS_ERR_FILE_FORMAT_UNRECOGNIZED。我不明白为什么。我只能将 RAW 图像保存为 .tif 或 JPEG 格式,如果其中imgref有一些价值的话。我尝试读取 JPEG 文件并成功。但是阅读 JPEG 对我来说毫无用处。请让我知道是否有任何设置需要更改。

以下链接中的方法是我想要做的。但它失败了。 佳能 SDk 文章,作者 Johannes Bildstein