【问题标题】:Loading and Show Image Sequence加载和显示图像序列
【发布时间】:2016-06-22 11:33:21
【问题描述】:

我正在使用 LabView 和 OpenCV 从 LabView 中的文件夹(16 位签名)加载未知数量的 2D 图片,然后将其提供给您执行某项操作的 OpenCV。用它,然后将其发送回 LabView。

这是我的方法,但没有奏效,希望你能帮助我吗?

更新:

唯一没有给我正确像素值的是如何从 LabView 访问 3D-Array。

【问题讨论】:

  • 使用glob
  • 谢谢,但我必须首先在 LabView 而不是 OpenCV 中加载图像。
  • 类似this? (只是一个快速的谷歌搜索,我不知道 labview 是如何工作的)

标签: c++ image opencv sequence labview


【解决方案1】:

您只读取一个图像:只有一个路径和一个 IMAQ 图像从 for 循环中输出。

我的建议:将 IMAQ 读取文件功能放在 for 循环中,并为 IMAQ 图像启用自动索引(记得在 for 循环的每次迭代中更改图像名称)。

然后,您可以在每个读取的图像上应用您的 OpenCV 函数。

【讨论】:

    【解决方案2】:

    您可以使用包含图像组路径的 std::vector。

    您可以使用如下函数来填充矢量,并使用图像的相对路径:

    std::vector<std::String> imagelistVector(std::string path)
    {
        std::vector<std::String> fn;
        cv::glob(path,fn,false);
        return fn;
    }
    

    使用 cv::glob 模板

    用法例如:

    vector<String> imglist=imagelistVector("data/*.jpg");
    

    将读取本地“数据”文件夹中所有扩展名为 .jpg 的图像

    然后您可以使用列表读取所有图像,通过使用这样的 for 循环:

    for (unsigned int i =0; i<imglist.size(); i++)
    {
      Mat img = imread(filelist.at(i), CV_LOAD_IMAGE_COLOR);
      //do something with each image
    }
    

    或者如果您想存储所有图像:

    std::vector<cv::Mat> images;
    for (unsigned int i =0; i<imglist.size(); i++)
    {
      Mat img = imread(filelist.at(i), CV_LOAD_IMAGE_COLOR);
       images.push_back(img)
    }
    //do something with all or a group of images
    

    【讨论】:

    • OP 询问(在 cmets 中)如何在 LabView 中执行此操作,而不是在 OpenCV 中(在这种情况下,作为重复关闭会是更好的选择。有很多答案已经展示了如何使用glob).
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多