【问题标题】:black screen video capture opencv黑屏视频捕获opencv
【发布时间】:2016-08-19 10:04:51
【问题描述】:

我正在尝试测试一个非常简单的程序来使用相机捕获视频,但似乎窗口总是黑色的。 打开摄像头的led,程序编译就好了。

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>

using namespace cv; 
using namespace std;

int main() {
VideoCapture stream1(0);   //0 is the id of video device.0 if you have only one camera.

if (!stream1.isOpened()) { //check if video device has been initialised
    cout << "cannot open camera";
}

//unconditional loop
while (true) {
    Mat cameraFrame;
    stream1.read(cameraFrame);
    imshow("cam", cameraFrame);
    if (waitKey(30) >= 0)
        break;
}
system("pause");
return 0;
}

【问题讨论】:

  • 您是否确认该相机适用于其他应用程序?我可以运行您的代码,它会正确显示视频,因此代码基本上没有问题。

标签: c++ opencv camera video-capture


【解决方案1】:

要缩小问题的根源,您可以按照以下步骤进行操作:

  • 检查 OpenCV highgui 是否配置正确。使用

    捕获保存的视频
    VideoCapture stream1("video.avi");
    stream1.read(cameraFrame);
    

    在 cameraFrame 上执行 imshow。

-如果还是黑屏,把stream1.read(cameraFrame);换成stream1&gt;&gt;cameraFrame; 如果您现在可以看到您的视频,则说明 OpenCV highgui 配置正确,您使用的摄像头可能存在问题。

  • 通常主摄像头驱动程序不会授予对第三方库的访问权限,在这种情况下是 OpenCV。将VideoCapture stream1(0) 替换为VideoCapture stream1(1)。这将指向您机器的基本凸轮驱动程序,而不是主凸轮驱动程序。

  • 如果黑屏仍然存在,我建议尽可能使用外部网络摄像头进行测试,问题可能出在摄像头硬件本身

【讨论】:

  • VideoCapture::operator &gt;&gt; 函数的实现基本上就是这样做的。肯定有其他问题。
  • 我已经编辑了我的答案以包含更多可能性。谢谢动画。
【解决方案2】:

遇到了类似的问题(但使用 Python)。 Saransh Kejriwa 的评论对 DSHOW 有效。万一有人偶然发现:

fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
cap = cv2.VideoCapture()
cap.open(1 + cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FOURCC, fourcc)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv2.CAP_PROP_FPS, 60)

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我发现卡巴斯基阻止了对我相机的访问。 如果您打开 Kapresky 并转到报告,然后转到高级线程保护选项卡下的主机入侵防护列,您可以查看它是否阻止了您的摄像头。

    如果这是问题,您可以转到Settings -> General Settings -> Exclusions -> Scan exclusions and trusted applications 并单击Settings。然后转到Trusted Applications tab 并单击Add -> Applications。搜索 Python 并单击确定并选中所有框。单击确定,然后单击保存,它应该可以工作。

    【讨论】:

    • 非常感谢!我在这个问题上被困了几个小时,并且从头开始重建所有东西(opencv、ffmpeg 等)......
    【解决方案4】:

    我遇到了同样的问题,在尝试了所有解决方案后,我发现我的网络摄像头分辨率更高。

    通过将 1280 * 720 更改为 640 * 480 来修复它。

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2018-03-15
      • 2018-04-17
      相关资源
      最近更新 更多