溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

c++怎么結(jié)合opencv實(shí)現(xiàn)讀取多張圖片并顯示

發(fā)布時(shí)間:2022-11-11 09:16:39 來(lái)源:億速云 閱讀:178 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“c++怎么結(jié)合opencv實(shí)現(xiàn)讀取多張圖片并顯示”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“c++怎么結(jié)合opencv實(shí)現(xiàn)讀取多張圖片并顯示”文章能幫助大家解決問(wèn)題。

方法一

主要函數(shù)

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

分析

String pattern:絕對(duì)路徑下的照片

  • pattern = "/home/Data/data/*.jpg": 選擇*.jpg這一類(lèi)的圖片

  • std::vector< cv::String > & result:這里必須為CV的String,即路徑被存在string類(lèi)型的vector中

  • bool recursive:可省去,當(dāng)recursive為false時(shí),僅僅遍歷指定文件夾內(nèi)符合模式的文件;當(dāng)recursive為true時(shí),會(huì)同時(shí)遍歷指定文件夾的子文件夾

頭文件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;
}

方法二

當(dāng)文件夾的圖片名稱(chēng)沒(méi)有規(guī)律或者有規(guī)律時(shí)(通用方法,萬(wàn)能模板)

#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++) {//依照順序讀取問(wèn)價(jià)下面的每張圖片,并顯示
        Mat image = imread(src_test[i]);
        imshow("image", image);
        waitKey(1000);
        image.release();//將Mat釋放
        destroyAllWindows();

    }
}

方法三

文件夾下圖片有序時(shí),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);//提取出文價(jià)夾下面的每張圖片路徑,放到fileName
  pic = imread(fileName);//讀取fileName路徑下面的圖片
  imshow("tpian", pic);//顯示圖像
  waitKey(1000);//顯示延時(shí)
 }
 pic.release();//將Mat釋放
}

關(guān)于“c++怎么結(jié)合opencv實(shí)現(xiàn)讀取多張圖片并顯示”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI