c++ - try catch 默认 iSight 摄像头时 OpenCV 崩溃

标签 c++ opencv

我正在尝试在我的 Macbook Pro(10.8.5,视网膜型号)上运行 openCV,并且我想使用默认的 iSight 摄像头进行输入,因为我不想随身携带或购买 USB 摄像头,如果我不需要。

我正在使用 OpenCV 用户文档中的示例程序:

#include "cv.h"
#include "highgui.h"

using namespace cv;

int main(int, char**)
{
    VideoCapture cap(0);
    if(!cap.isOpened()) return -1;

    Mat frame, edges;
    namedWindow("edges",1);
    for(;;)
    {
        cap >> frame;
        cvtColor(frame, edges, CV_BGR2GRAY);
        GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
        Canny(edges, edges, 0, 30, 3);
        imshow("edges", edges);
        if(waitKey(30) >= 0) break;
    }
    return 0;
}

当我运行这个程序时,程序断言失败:

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /Users/dadair/opencv/src/modules/imgproc/src/color.cpp, line 3402
libc++abi.dylib: terminate called throwing an exception

谁能解释为什么会失败,以及我能做些什么来解决这个问题?我正在运行 OpenCV 2.4.6。

谢谢!

最佳答案

问题出在所使用的 openCV 版本 (2.4.6) 上。要访问 iSight 摄像头,您必须使用 2.4.5,直到修复 2.4.6 中引入的任何错误。从 Homebrew 在 OSX 上获取 2.4.5:

$ brew versions opencv
$ cd /usr/local/Library/Taps/homebrew-science

检查 git 版本到旧版本:

$ git checkout ae74fe9 opencv.rb

去掉原来的opencv版本(大概是2.4.6)

$ brew unlink opencv

安装2.4.5版本:

$ brew install opencv

关于c++ - try catch 默认 iSight 摄像头时 OpenCV 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169911/

相关文章:

c++ - 如何处理程序版本更新时不断变化的数据结构?

c++ - 如何使用数据库 (SQlite) 制作 C++ 可移植应用程序

c++ - 对 CV_16S 类型的图像进行去噪

opencv - 怎么把白色像素的黑色背景转换成黑色像素的白色背景?

c++ - 调用静态opencv库

c++ - 在 C++ 中遍历可能包含 0xff 的十六进制输入

c++ - winsock 错误 10049 尝试绑定(bind)

c++ - 对整数类型重载 std::isnan 和 std::isinf

python - 为什么 OpenCV 中的 drawcontours 不填充图像边缘的轮廓?

python - OpenCV 图像深度被 JSON 破坏