使用VideoCapture读取目录中的图像不起作用

时间:2014-10-11 18:25:32

标签: c++ c opencv

我试图在 Linux 上使用OpenCV读取多个名为001.jpg,002.jpg,003.jpg及以后的图像文件,并在延迟一段时间后在窗口中显示它们。这是我的代码 -

int main(int argc, char ** argv){
    cv::VideoCapture cam("/home/bikz05/Desktop/dataset/%03d.jpg");
    if (!cam.isOpened())
        cout << "Capture is not opened";
    cv::Mat image;
    const string Window = "Image Number";
    namedWindow(Window, CV_WINDOW_NORMAL);
    while(true) {
        cam >> image;
        if (!image.data) {
            std::cout << "Preview Ends" << std::endl;
            break;
        }
        cv::imshow(Window, image);
        waitKey(1000);
    }
    return 0;
}

在主要功能的第一行,我甚至尝试使用

cv::VideoCapture cam("/home/bikz05/Desktop/dataset/001.jpg");

我甚至尝试将图像放在与二进制文件相同的文件夹中,即使没有帮助。

在这两种情况下,它只显示第一张图像,然后程序退出。请注意,它没有完成。

P.S。 - Stack Exchangeopencv.org提供的答案未产生预期结果。

2 个答案:

答案 0 :(得分:2)

您编写的代码有几个问题,但如果您要从磁盘读取图像,请使用cv::imread()代替cv::VideoCapture

std::string filename = "/home/bikz05/Desktop/dataset/001.jpg";
const std::string Window = "Image Number";
cv::namedWindow(Window, CV_WINDOW_NORMAL);
while (true) 
{
    cv::Mat image = cv::imread(filename.c_str());
    if (!image.data) 
    {
        std::cout << "!!! File not found: " << filename << std::endl;
        break;
    }

    cv::imshow(Window, image);
    cv::waitKey(1000);

    // And before the loop ends, update filename with the next image:
    // filename = ???;
}

我没有测试过这个,但我相信你明白了。

答案 1 :(得分:0)

glob(folderpath, vectorOfimages)中使用glob,然后以vectorOfimages[i]访问每个图像。

vectorOfimages是

 vector<String>

和folderpath是一个字符串。

我遇到了同样的问题而videoCapture无法解决问题。