c++结合opencv如何实现读取多张图片并显示

 更新时间:2022年11月10日 10:34:41   作者:大神之路@CV  
这篇文章主要介绍了c++结合opencv如何实现读取多张图片并显示问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

方法一

主要函数

void cv::glob(String pattern,std::vector<string>&result,bool recursive=false)

分析

String pattern:绝对路径下的照片

  • pattern = "/home/Data/data/*.jpg": 选择*.jpg这一类的图片
  • std::vector< cv::String > & result:这里必须为CV的String,即路径被存在string类型的vector中
  • bool recursive:可省去,当recursive为false时,仅仅遍历指定文件夹内符合模式的文件;当recursive为true时,会同时遍历指定文件夹的子文件夹

头文件AI.h

#pragma once
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

class Ve {
public:
    vector<Mat> ReadImage(cv::String pattern);
};

cpp文件:

#include "AI.h"
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    cv::String pattern = "E:\\VSprojeect\\test\\test\\images\\*.png";
    Ve ve;
    vector<Mat> img = ve.ReadImage(pattern);
    return 0;
}
vector<Mat> Ve::ReadImage(cv::String pattern)
{
    vector<cv::String> fn;
    glob(pattern, fn, false);
    vector<Mat> images;
    size_t count = fn.size(); //number of png files in images folder
    for (size_t i = 0; i < count; i++)
    {
        images.emplace_back(cv::imread(fn[i]));
        imshow("img", imread(fn[i]));
        //imwrite("E:\\VSprojeect\\testyolo\\saveimg\\",images);
        waitKey(1000);
        destroyAllWindows();

    }
    return images;
}

方法二

当文件夹的图片名称没有规律或者有规律时(通用方法,万能模板)

#include<stdio.h>
#include "opencv2/opencv.hpp"
#include <opencv2\highgui\highgui.hpp>
#include<string>
#include<vector>
#include<iostream>
using namespace cv;
using namespace std;
void main() {
    String path = "E:\\VSprojeect\\get_muti_images\\images";//文件夹路径
    vector<String>src_test;
    glob(path, src_test, false);//将文件夹路径下的所有图片路径保存到src_test中
    if (src_test.size() == 0) {//判断文件夹里面是否有图片
        printf("error!!!\n");
        exit(1);
    }
    for (int i = 0; i < src_test.size(); i++) {//依照顺序读取问价下面的每张图片,并显示
        Mat image = imread(src_test[i]);
        imshow("image", image);
        waitKey(1000);
        image.release();//将Mat释放
        destroyAllWindows();

    }
}

方法三

文件夹下图片有序时,OpenCV读取方法

#include<stdio.h>
#include "opencv2/opencv.hpp"
#include <opencv2\highgui\highgui.hpp>
#include<string>
#include<iostream>
using namespace cv;
using namespace std;
void main(){
char fileName[500];
 Mat pic;
 for (int i = 0; i < 110; i++) {//文件夹下面一共有110张图片
  printf("start deal:%d\n", i + 1);
  sprintf_s(fileName, ".//picture//%d.bmp", i);//提取出文价夹下面的每张图片路径,放到fileName
  pic = imread(fileName);//读取fileName路径下面的图片
  imshow("tpian", pic);//显示图像
  waitKey(1000);//显示延时
 }
 pic.release();//将Mat释放
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++使用ADO实现存取图片的方法

    C++使用ADO实现存取图片的方法

    这篇文章主要介绍了C++使用ADO实现存取图片的方法,需要的朋友可以参考下
    2014-07-07
  • 利用C++实现简易的.ini配置文件解析器

    利用C++实现简易的.ini配置文件解析器

    这篇文章主要为大家详细介绍了如何基于C++编写一个简易的.ini配置文件解析器,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-03-03
  • C++算术运算符与类型转换

    C++算术运算符与类型转换

    这篇文章主要介绍了C++算术运算符与类型转换,C++当中提供5种基础的算术运算符,分别是加法、减法、乘法、除法和取模。下main我们就一起来看看下面文章得具体举例与说明,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • C语言printf详细解析

    C语言printf详细解析

    C中格式字符串printf()的一般形式为: %[标志][输出最小宽度][.精度][长度]类型, 其中方括号[]中的项为可选项。各项的意义介绍如下
    2013-09-09
  • C语言实现简单万年历

    C语言实现简单万年历

    这篇文章主要为大家详细介绍了C语言实现简单万年历,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C++ 类模板、函数模板全特化、偏特化的使用

    C++ 类模板、函数模板全特化、偏特化的使用

    这篇文章主要介绍了C++ 类模板、函数模板全特化、偏特化的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C语言数据的存储详解

    C语言数据的存储详解

    本文详细讲解了C语言数据的存储,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C++插入排序算法实例

    C++插入排序算法实例

    这篇文章主要介绍了C++插入排序算法实例,本文先是讲解了什么插入排序,然后给出了C++代码实例,需要的朋友可以参考下
    2014-10-10
  • 浅谈c和c++的某些小区别

    浅谈c和c++的某些小区别

    下面小编就为大家带来一篇浅谈c和c++的某些小区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • C语言实现线索二叉树的定义与遍历示例

    C语言实现线索二叉树的定义与遍历示例

    这篇文章主要介绍了C语言实现线索二叉树的定义与遍历,结合具体实例形式分析了基于C语言的线索二叉树定义及遍历操作相关实现技巧与注意事项,需要的朋友可以参考下
    2017-06-06

最新评论