gpt4 book ai didi

macos - MacOS QT 中的错误消息 "OpenCV: not authorized to capture video (status 0)"

转载 作者:行者123 更新时间:2023-12-02 16:33:02 25 4
gpt4 key购买 nike

我知道已经有一些类似的问题,而且问题似乎不是由 OpenCV 而是由 MacOS 权限规则引起的。

我已经阅读了一些解决方案,例如在源目录中创建一个 Info.plist。那行得通!但对我来说,现在只能在 QTCreator 的 Debug模式下,而不是在 Release模式下。也就是说,当我在 Debug模式下运行程序时,一切正常。但在 QTCreator 的 Release模式下,会显示错误消息:

OpenCV: not authorized to capture video (status 0), requesting...
16:12:22: The program has unexpectedly finished.

一些更奇怪的信息。 QTCreator 以Release 或Debug 模式生成的Test.app 程序,在确定授权后可以直接双击或Test.app/Contents 中的可执行文件执行。

附加系统信息:
  • macOS Catalina 版本 10.15.4
  • Qt 5.14.2
  • OpenCV 4.3.0

  • 还有 Info.plist
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
    <plist version="0.9">
    <dict>
    <key>NSCameraUsageDescription</key>
    <string>uses camera to see vision targets</string>
    </dict>
    </plist>

    一些代码可能会有所帮助。仅供引用,该程序在创建 Camera 类之前崩溃。

    // camera.cpp
    std::shared_ptr<Camera> Camera::Ptr = nullptr;

    void Camera::CreateCamera()
    {
    if(!Ptr)
    Ptr.reset(new Camera);
    }

    Camera::Camera()
    : _device(1)
    {
    }
    bool Camera::GrabMerged(cv::Mat &img)
    {
    if(_device.isOpened())
    {
    cv::Mat tmp;
    _device.read(tmp);
    if(tmp.empty())
    {
    qWarning("[Camera] Grab image failed.");
    return false;
    }
    qInfo("[Camera] merged image info: cols=%d, rows=%d, channels=%d, step0=%lu,step1=%lu, type=%d",
    tmp.cols, tmp.rows, tmp.channels(), tmp.step[0], tmp.step[1], tmp.type());
    cv::cvtColor(tmp, img, cv::COLOR_RGB2BGR);
    return true;
    }
    qCritical("[Camera] Camera is not opened.");
    return false;
    }
    ...

    // camera.h
    class Camera: public QObject
    {
    ...
    private:
    cv::VideoCapture _device;
    ...
    }

    最佳答案

    感谢您花时间推送 minimal project允许重现错误。

    经过一些测试,从命令行启动或双击应用程序包图标(在发布和 Debug模式下)时,该项目似乎工作正常。在后一种情况下,系统在点击 open 时请求使用摄像头的权限。按钮。授予权限后,我们需要再次单击按钮,这是 OpenCV VideoCapture 的预期行为在 macOS 上。

    但是当我从 Qt Creator 启动它时,我收到了这个奇怪的消息:

    dyld: Symbol not found: __cg_jpeg_resync_to_restart Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO Expected in: /usr/local/lib/libJPEG.dylib in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO 18:29:38: The program has unexpectedly finished.



    这与您的不同,但这表明正常执行与 QtCreator 执行之间存在一些差异。
    就我而言,Qt Creator 是罪魁祸首。

    在禁用 DYLD_LIBRARY_PATH 之后运行环境下的变量(项目设置 -> 运行 -> 环境),它在 QtCreator 中运行良好。万岁!

    我的设置如下:
    Qt Creator settings
    这是 Qt Creator 4.12/Qt 5.14.2/OpenCV 4.3.0

    关于macos - MacOS QT 中的错误消息 "OpenCV: not authorized to capture video (status 0)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62190614/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com