OpenCv 中的 imshow 显示黑屏
imshow in OpenCv shows black screen
我已经创建了一个项目并且它工作正常,在重新安装操作系统后,我设置了环境和所有组件,突然我根本没有得到任何输出。我的测试程序很简单:
#include <cstdio>
#include "opencv2/opencv.hpp"
#include <iostream>
#include <sstream>
using namespace cv;
using namespace std;
int main(int, char**)
{
VideoCapture cap("videofile.avi");
if (!cap.isOpened()) // check if we succeeded
return -1;
namedWindow("Frame", 1);
for (;;)
{
Mat frame;
if (!cap.read(frame)) {
cerr << "Unable to read next frame." << endl;
cerr << "Exiting..." << endl;
exit(EXIT_FAILURE);
}
imshow("Frame", frame);
if (waitKey(30) >= 0) break;
}
return 0;
}
我已经安装了所有必要的编解码器并更新了显卡驱动程序。仍然出现相同的黑屏。
输出如下所示:
编辑:
问题似乎只出现在使用 AVC 编解码器播放 .avi 视频时
编辑:
最后,PATH 变量中缺少 bin 文件夹,因此在添加新条目后 - %OPENCV_DIR%\bin,一切正常。
笨拙的解决方案:
获取 opencv_ffmpeg300.dll、opencv_ffmpeg.dll,这些可以在 opencv 库中找到
- 获取 openh264-1.5.0-win64msvc.dll 这个可以在 Openh264 找到
- 将所有这些复制到项目的工作目录中
我已经创建了一个项目并且它工作正常,在重新安装操作系统后,我设置了环境和所有组件,突然我根本没有得到任何输出。我的测试程序很简单:
#include <cstdio>
#include "opencv2/opencv.hpp"
#include <iostream>
#include <sstream>
using namespace cv;
using namespace std;
int main(int, char**)
{
VideoCapture cap("videofile.avi");
if (!cap.isOpened()) // check if we succeeded
return -1;
namedWindow("Frame", 1);
for (;;)
{
Mat frame;
if (!cap.read(frame)) {
cerr << "Unable to read next frame." << endl;
cerr << "Exiting..." << endl;
exit(EXIT_FAILURE);
}
imshow("Frame", frame);
if (waitKey(30) >= 0) break;
}
return 0;
}
我已经安装了所有必要的编解码器并更新了显卡驱动程序。仍然出现相同的黑屏。
输出如下所示:
编辑:
问题似乎只出现在使用 AVC 编解码器播放 .avi 视频时
编辑: 最后,PATH 变量中缺少 bin 文件夹,因此在添加新条目后 - %OPENCV_DIR%\bin,一切正常。
笨拙的解决方案: 获取 opencv_ffmpeg300.dll、opencv_ffmpeg.dll,这些可以在 opencv 库中找到 - 获取 openh264-1.5.0-win64msvc.dll 这个可以在 Openh264 找到 - 将所有这些复制到项目的工作目录中