【问题标题】:Sample code for using mac camera in a program?在程序中使用 mac 相机的示例代码?
【发布时间】:2010-09-08 14:47:50
【问题描述】:

我想在一个程序中使用我的 Macbook 中的相机。我与语言无关——C、Java、Python 等都很好。谁能建议查找文档或“Hello world”类型代码的最佳位置?

【问题讨论】:

    标签: cocoa language-agnostic macos camera


    【解决方案1】:

    Leopard 中的 ImageKit 框架有一个 IKPictureTaker 类,可让您运行您在 iChat 和其他应用程序中看到的标准拍照表或面板。

    如果您不想使用标准的拍照面板/工作表界面,您可以使用QTKit Capture 功能从 iSight 获取图像。

    这两者都需要在 Objective-C 中编写一些 Cocoa 代码,但如今这不应该成为真正的障碍。

    【讨论】:

    • 如果有人能做到这一点,我会很高兴看到一些示例代码。也许直接通过 ctypes?
    【解决方案2】:

    如果您想直接从您的代码中操作相机,您必须使用 QuickTime Capture API 或 Cocoa QTKit Capture 包装器(更好)。

    唯一需要注意的是:如果您使用 QTCaptureDecompressedVideoOutput,请记住回调不是在主线程上进行的,而是在 QuickTIme 管理的捕获线程上进行的。使用 [someObject performSelectorOnMainThread:... withObject:... waitUntilDone:NO] 向主线程上的对象发送消息。

    【讨论】:

      【解决方案3】:

      有一个名为 isightcapture 的实用程序,它从 unix 命令行运行,从 isight 相机拍摄照片并保存。

      您可以在这个网站上查看:http://www.macupdate.com/info.php/id/18598

      将其与 AppleScript 一起使用的示例是:

      告诉应用程序“终端” 执行脚本“/Applications/isightcapture myimage.jpg” 结束告诉

      【讨论】:

        【解决方案4】:

        从专门要求解决方案为 pythonic 的相关问题,您应该尝试使用 Andrew Straw 的 motmot's camiface 库。它也适用于火线相机,但也适用于 isight,这是您正在寻找的。​​p>

        来自教程:

        import motmot.cam_iface.cam_iface_ctypes as cam_iface
        import numpy as np
        
        mode_num = 0
        device_num = 0
        num_buffers = 32
        
        cam = cam_iface.Camera(device_num,num_buffers,mode_num)
        cam.start_camera()
        frame = np.asarray(cam.grab_next_frame_blocking())
        print 'grabbed frame with shape %s'%(frame.shape,)
        

        用在这个sample neuroscience demo

        【讨论】:

          【解决方案5】:

          Quartz Composer 在适用的情况下也是一种捕捉和处理视频的好方法。有一个视频输入补丁。

          Quartz Composer 是一个可视化编程环境,如果需要,它可以集成到更大的 Cocoa 程序中。

          http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html

          【讨论】:

            【解决方案6】:

            另一种解决方案是OpenCV+python,其脚本如下:

            import cv
            capture = cv.CaptureFromCAM(0)
            img = cv.QueryFrame(capture)
            

            不能再简单了!

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-06-17
              • 2020-02-05
              相关资源
              最近更新 更多