C++ OpenCV:isOpened()总是失败
我正在使用OpenCV迈出第一步,我正在尝试运行这段代码。它应该在新窗口中打开指定的视频,并等待用户按ESC键。我尝试将相对路径和绝对路径传递给VideoCapture,但VideoCapture::IsOpen()总是失败。为什么会这样 如果我将0传递给VideoCapture,而不调用isOpened(),则会得到一个漂亮的小窗口 请注意,我使用的是VS15和OpenCV 2.4(带有x86 libs) 编辑:我通过重新安装OpenCV并创建一个新的VisualStudio项目解决了这个问题。上述代码奇迹般地开始工作 如果我将0传递给VideoCapture,而不调用isOpened(),则会得到一个 漂亮的小窗户。为什么会这样 因为C++ OpenCV:isOpened()总是失败,c++,opencv,C++,Opencv,我正在使用OpenCV迈出第一步,我正在尝试运行这段代码。它应该在新窗口中打开指定的视频,并等待用户按ESC键。我尝试将相对路径和绝对路径传递给VideoCapture,但VideoCapture::IsOpen()总是失败。为什么会这样 如果我将0传递给VideoCapture,而不调用isOpened(),则会得到一个漂亮的小窗口 请注意,我使用的是VS15和OpenCV 2.4(带有x86 libs) 编辑:我通过重新安装OpenCV并创建一个新的VisualStudio项目解决了这个问题
VideoCapture
类有两个不同的构造函数。获取字符串的字符串试图从文件中读取。接受整数的一个尝试从设备读取。将0传递给第二个版本将指定默认设备/相机
视频捕获::打开¨打开视频文件或视频捕获设备
捕获
C++:bool VideoCapture::open(常量字符串和文件名)
C++:bool VideoCapture::open(int设备)
参数:
filename–打开的视频文件的名称(例如video.avi)
或图像序列(例如img_u%02d.jpg,它将读取以下样本
img_00.jpg、img_01.jpg、img_02.jpg……)
设备–打开的视频捕获设备的id(即摄像机索引)
也许你走错了路。你逃走了吗?您使用了正确的分机吗?默认情况下,Windows资源管理器隐藏已知扩展名,但在代码中必须使用该扩展名。@drescherjm是的,我想我已经使用了。我使用了这个“C:\\Users\\me\\myproject\\data\\sample.avi”。你能上传sample.avi或告诉我们使用哪种编解码器吗?您的程序是否可以访问opencv_ffmpeg*.dll文件?请确保它位于应用程序可以找到它的位置(例如,位于opencv_core*.dll所在的同一位置)。无法复制。投票结束这个问题。我同意这个问题应该结束。我怀疑我的OpenCV安装和/或为运行代码而设置的Visual Studio项目有问题。我将删除所有内容并重新安装它们。谢谢你的帮助。编辑:@MFisherKDX你下面的评论很有帮助,我试着提高投票率,但因为我的评分很低,所以我无法提高投票率。不过,我非常感谢您的意见。注释“为什么会发生这种情况?”是针对视频文件的问题,例如,为什么我不能加载视频文件?:-p我也尝试了open(),但也失败了。
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int, char**)
{
VideoCapture cap(path_to_video); // open the video file
// VideoCapture cap(0);
if(!cap.isOpened()) // check if we succeeded
return -1;
namedWindow("Video",1);
for(;;)
{
Mat frame;
cap >> frame; // get a new frame from camera
imshow("Video", frame);
if(waitKey(30) >= 0) break;
}
return 0;
}