Mac macOS 10.14 Mojave Xcode OpenCV 无法打开摄像头,调用摄像头权限错误

Mac macOS 10.14 Mojave Xcode opencv 调用摄像头权限错误

This app has crashed because it attempted to access privacy-sensitive data without a usage description.

OpenCV: camera failed to properly initialize!

更新了macOS 10.14 Mojave之后,使用opencv调用摄像头会产生权限错误,报错This app has crashed because it attempted to access privacy-sensitive data without a usage description.
OpenCV: camera failed to properly initialize!
原因是macOS 10.14加入了对所有程序的隐私权限管理,如果要涉及隐私权限,要在可执行程序旁边加入Info.plist且在里面注册摄像头权限。

操作示例

这里从Mac自带程序Photo Booth里复制Info.plist,在应用程序文件夹里找到Photo Booth.app,右键选择显示包内容,文件夹里有一个Info.plist文件Mac macOS 10.14 Mojave Xcode OpenCV 无法打开摄像头,调用摄像头权限错误_第1张图片

Mac macOS 10.14 Mojave Xcode OpenCV 无法打开摄像头,调用摄像头权限错误_第2张图片

将文件复制

然后打开Xcode找到自己的工程Mac macOS 10.14 Mojave Xcode OpenCV 无法打开摄像头,调用摄像头权限错误_第3张图片

如上图所示,找到Products中的Target文件并用finder打开
Mac macOS 10.14 Mojave Xcode OpenCV 无法打开摄像头,调用摄像头权限错误_第4张图片

将Info.plist文件粘贴在该文件夹下

修改Info.plist文件中的内容,原文件内容如下Mac macOS 10.14 Mojave Xcode OpenCV 无法打开摄像头,调用摄像头权限错误_第5张图片

删去其中的不必要的键值对,最后加入键Privacy - Camera Usage Description,值为YES,修改好后的Info.plist如下,OpenCV为我的项目名。Mac macOS 10.14 Mojave Xcode OpenCV 无法打开摄像头,调用摄像头权限错误_第6张图片

其中这几项为自己的项目名,根据自己工程名进行修改Mac macOS 10.14 Mojave Xcode OpenCV 无法打开摄像头,调用摄像头权限错误_第7张图片

修改之后保存就可以了

//
//  2-8摄像头.cpp
//  OpenCV
//
//  Created by 卢欣 on 2019/7/14.
//  Copyright © 2019 卢欣. All rights reserved.
//

#include 
#include 
#include 

using namespace cv;



int main(int argc, char** argv)
{
    Mat frame;
    namedWindow("frame",cv::WINDOW_AUTOSIZE);
    
    VideoCapture cap;
    cap.open(0);
    if(!cap.isOpened())
    {
        std::cerr << "Couldn't open capture." << std::endl;
        return -1;
    }
    
    while(true)
    {
        cap >> frame;
        imshow("frame", frame);
        char c = waitKey(20);    //延时30
        if(c == 'q')
        {
            break;
        }
        
    }
    return 0;
}

用该代码测试后即可,代码会打开摄像头,按q退出

你可能感兴趣的:(Opencv,C++,Xcode,mac)