c++結合opencv如何實現(xiàn)讀取多張圖片并顯示
更新時間:2022年11月10日 10:34:41 作者:大神之路@CV
這篇文章主要介紹了c++結合opencv如何實現(xiàn)讀取多張圖片并顯示問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
方法一
主要函數(shù)
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; }
方法二
當文件夾的圖片名稱沒有規(guī)律或者有規(guī)律時(通用方法,萬能模板)
#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釋放 }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Visual studio setup.exe 安裝vs2022報錯的解決方案
這篇文章主要介紹了Visual studio setup.exe 安裝vs2022報錯的解決方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01