使用EDSDK进行高速(连拍)拍摄

时间:2018-04-13 01:48:11

标签: edsdk canon-sdk

我正在尝试使用EOS 40D进行高速拍摄。在UI中将驱动模式设置为“高速连续”的手动操作时,此相机可维持约6 fps。

如何使用EDSDK复制此内容?

下面的代码选择“高速连续”驱动模式(0x4)并尽可能快地发送kEdsCameraCommand_TakePicture。每次拍摄后,相机保持“忙”约1秒钟。这与单帧拍摄的速度相同。我测试了所有可用的驱动模式,虽然有些速度较慢,但​​没有一个比1 fps快。

请注意,EOS 40D不支持kEdsCameraCommand_PressShutterButton。使用它会得到EDS_ERR_INVALID_PARAMETER。 EDSDK文件说:“EOS 50D或EOS 5D Mark II或更高版本的摄像机支持此命令”,因此40D太旧了。

printf("============= Testing drive mode %08X\n", drive_mode);

result = EdsSetPropertyData(m_CameraRef, kEdsPropID_DriveMode, 0, sizeof(EdsUInt32), &drive_mode);
assert(result == EDS_ERR_OK);

EdsUInt32 new_drive_mode;
result = EdsGetPropertyData(m_CameraRef, kEdsPropID_DriveMode, 0, sizeof(EdsUInt32), &new_drive_mode);
assert(result == EDS_ERR_OK);
assert(new_drive_mode == drive_mode);

int n_captured = 0;
for (int i = 0; i < count; i++)
{
    do
    {
        result = EdsSendCommand(m_CameraRef, kEdsCameraCommand_TakePicture, 3);
        printf("  %d", result);
        Wait(1); // Process Windows messages for a few ms
    } while (result == EDS_ERR_DEVICE_BUSY);
    printf("\n");
    if (result == EDS_ERR_OK)
        n_captured++;
    else
        printf(" Burst capture error code for frame %d: %d!\n", i, result);
}
printf(" Burst capture end!\n");

典型输出如下:

============= Testing drive mode 00000004
  0
  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129
  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129
  129  129  129  129  129  129  129  129  129  129  0
  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129
  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129
  129  129  129  129  129  129  129  129  129  129  129  0
 Burst capture end!

代码129为EDS_ERR_DEVICE_BUSY

1 个答案:

答案 0 :(得分:1)

使用40D是不可能的,因为正如您已经指出的那样,不支持PressShutterButton命令。

您可以通过将SaveTo设置为Host来使用TakePicture命令加快速度,并在获得DownloadReady对象事件后立即拍摄照片。
您需要保存该事件的指针,完成后,下载所有图像 请注意缓冲区大小有限,并且取决于图像质量(jpg / raw,大/小)可能只适合三个或四个图像。

或者,使用速度更快的CF卡,这样当您将图像保存在相机上时,它就会很快再次准备就绪。