【问题标题】:Displaying Images from file using OpenCV VideoCapture, and C++ vectors使用 OpenCV VideoCapture 和 C++ 向量显示文件中的图像
【发布时间】:2014-09-20 02:57:50
【问题描述】:

我正在使用 OpenCV VidoeCapture 从文件中读取图像序列——我相信我做这部分是正确的——然后将它们放入 c++ 向量中,以便稍后处理。 为了测试这一点,我编写了以下代码,它将读取图像,将它们放入矢量中,然后从矢量中一张一张地显示这些图像。但是,当我运行它时,没有图像出现。 怎么了?

我使用的是树莓派,我不知道这是否有什么不同。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <vector>
#include <iostream>

using namespace cv;
using namespace std;


vector<Mat> imageQueue;


int main(int argc, char** argv)
{
  string arg = ("/home/pi/pictures/ceilingSequence/%02d.jpg");
  VidoeCapture sequence(arg);

  if(!sequence.isOpened()) {
    cout << "Failed to open image sequence" << endl;
    return -1;
  }

  Mat image;
  for(;;)
  {
    sequence >> image;
    if(image.empty()) {
       cout << "End of sequence" << endl;
       break;
    }
    imageQueue.push_back(image);
  }

  for(int i = 0; i < 10; i++)
  {
    //display 10 images
    Mat readImage;
    readImage = imageQueue[i];
    namedWindow("Current Image", CV_WINDOW_AUTOSIZE);
    imshow("Current Image", readImage);
    sleep(2);
  }


return 0;
}

【问题讨论】:

    标签: c++ opencv vector


    【解决方案1】:

    请将 sleep(2) 替换为 waitKey(2000)。 // 假设你想等待 2 秒

    即使您一般对按键不感兴趣,也需要正确更新 opencv / highgui 图形循环。

    【讨论】:

    • 我已经解决了,谢谢!现在它只显示最后一张图片 10 次,而不是连续显示每张图片 - 有什么想法吗?
    • 您从网络摄像头获得的图像引用了捕获中的静态内存(这就是为什么它们都是“相同的”)。 imageQueue.push_back(image.clone()); 将修复它(复制)
    猜你喜欢
    • 2015-10-14
    • 2017-05-28
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 2021-12-04
    • 2015-01-10
    相关资源
    最近更新 更多