imShow 上的 OpenCV 崩溃仅适用于 USB 网络摄像头

Posted

技术标签:

【中文标题】imShow 上的 OpenCV 崩溃仅适用于 USB 网络摄像头【英文标题】:OpenCV Crashes on imShow only for usb webcam 【发布时间】:2016-06-19 18:22:40 【问题描述】:

我正在尝试使用 Qt 设置 openCV。尽管我目前只进行 C++/opencv 调用,但我正在使用 Qt creator。此代码适用于我的集成网络摄像头,但是当我切换到我的 USB 摄像头时,我收到一个 Windows 错误,告诉我 opencv.exe 已崩溃,Qt 告诉我我的程序意外完成。有趣的是,如果我将 imshow 更改为 imwrite,我会在一个文件中从网络摄像头获取输出,因此捕获似乎可以正常工作,我只是无法显示。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/videoio.hpp>

using namespace cv;
int main(int argc, char *argv[])

    VideoCapture cap(0);

    // open the default camera, use something different from 0 otherwise;
    // Check VideoCapture documentation.
    if(!cap.isOpened())
        return 1;

    for(;;)
    
          Mat frame;
          cap.retrieve(frame);
          if( frame.empty() ) break; // end of video stream

          imshow("this is you, smile! :)", frame);
          if( waitKey(1) == 27 ) break; // stop capturing by pressing ESC
    
    // the camera will be closed automatically upon exit
    // cap.close();
    return 0;
  

【问题讨论】:

【参考方案1】:

我猜当您使用 USB 摄像头时,您将参数更改为 VideoCapture cap(1) 而不是 cap(0)。 cap(1) 是您的 USB 摄像头驱动程序,可能需要单独安装。试试 cap(2) 或 cap(3),看看你是否通过 USB 摄像头在 imshow 上得到输出。

如果没有帮助,请更换

cap.retrieve(frame);

cap>>frame;

【讨论】:

是的,忘了提到我确实从 cap(0) 更改为 cap(1)。实际上取决于当我启动它的 cap(0) 并且我的集成摄像头是 cap(1) 时 USB 摄像头是否在里面。没有运气更改为 2 或 3 他们在 !cap.isOpened() 调用中退出。生病尝试重新安装驱动程序。虽然我认为他们正在工作,因为我可以将帧写入文件

以上是关于imShow 上的 OpenCV 崩溃仅适用于 USB 网络摄像头的主要内容,如果未能解决你的问题,请参考以下文章

opencv.imshow 会导致 jupyter notebook 崩溃

OpenCV imshow() 防止 Qt / python 崩溃

简单的 C++ OpenCV imshow 示例因分段错误而崩溃

Opencv imshow 在 macOS 11.0.1 (Big Sur) 上崩溃 python 启动器

Android Apk 仅适用于 KivyMd 崩溃

无法使用 python 3.5 安装 opencv 3.1,仅适用于 2.7