日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Opencv——批量处理同一文件夹下的图片(解决savedfilename = dest + filenames[i].substr(len)问题)

發布時間:2023/12/1 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Opencv——批量处理同一文件夹下的图片(解决savedfilename = dest + filenames[i].substr(len)问题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、完整代碼
  • 二、實現效果


前言

第一份代碼實現了批量修改同一文件夾下圖片的尺寸,有其他需求時僅需修改處理部分的代碼以及文件夾路徑。
第二份代碼實現了批量截取同一文件夾下每張圖片的ROI區域作為結果保存,注意截取后按下enter鍵才會跳到下一張圖片,同時若是對已經截取的不滿意只要不按下enter鍵都是可以重新選擇的,這都得益于selectROI函數。
參考了文章:
opencv——批量處理圖片并保存

但是編譯時發現了問題,debug發現是下面一行代碼出了問題。

savedfilename = dest + filenames[i].substr(55);

報錯:

[[noreturn]] static void _Xlen()

經過百度,發現代碼中的55意味著path的字符串長度。修改代碼為

int len = path.length(); savedfilename = dest + filenames[i].substr(len);

問題解決。


一、完整代碼

代碼1:

#include <opencv2/opencv.hpp> #include "opencv2/features2d.hpp" #include <vector> #include <algorithm> #include <iostream> #include "windows.h" #include <stdio.h> #include <time.h> #include <math.h> #include <fstream> #define WINDOW_NAME "【程序窗口】" using namespace cv; using namespace std; int main() {cv::String path = "D:/opencv_picture_test/視覺項目新/"; //待處理圖片文件夾地址cv::String dest = "D:/opencv_picture_test/視覺項目resize后的圖片夾/測試圖片夾/"; //處理后圖片的保存地址cout << "獲取地址成功"<< endl;cv::String savedfilename;std::vector<cv::String> filenames;int len = path.length();cv::Mat srcImg, dstImg;cv::glob(path, filenames); //opencv里面用來讀取指定路徑下文件名的一個很好用的函數for (int i = 0; i < filenames.size(); i++) {srcImg = cv::imread(filenames[i]);//*************************對圖片的處理部分***************************///這里我們批量修改圖片的大小resize(srcImg, dstImg,Size(600,450));//********************************************************************/savedfilename = dest + filenames[i].substr(len);std::cout << savedfilename << std::endl;cv::imwrite(savedfilename, dstImg);cout << "第" << i << "張完成" << endl;}waitKey(0);return 0; }

代碼2:

#include <opencv2/opencv.hpp> #include "opencv2/features2d.hpp" #include <vector> #include <algorithm> #include <iostream> #include "windows.h" #include <stdio.h> #include <time.h> #include <math.h> #include <fstream> #define WINDOW_NAME "【程序窗口】" using namespace cv; using namespace std; int main() {//改變控制臺字體顏色system("color 02");cv::String path = "D:/opencv_picture_test/視覺項目resize后的圖片夾/測試圖片夾/"; //待處理圖片文件夾地址cv::String dest = "D:/opencv_picture_test/視覺項目resize后的圖片夾/模板圖片夾/"; //處理后圖片的保存地址cout << "獲取地址成功" << endl;cv::String savedfilename;std::vector<cv::String> filenames;int len = path.length();cv::Mat srcImg, dstImg;cv::glob(path, filenames); //opencv里面用來讀取指定路徑下文件名的一個很好用的函數for (int i = 0; i < filenames.size(); i++) {srcImg = cv::imread(filenames[i]);//*************************對圖片的處理部分***************************///這里我們批量選擇原圖中的某塊ROI區域作為結果保存Rect2d r;r = selectROI(srcImg, true); //選擇一個矩形roi區域dstImg = srcImg(r); //此區域為模板區域destroyAllWindows();//********************************************************************/savedfilename = dest + filenames[i].substr(len);std::cout << savedfilename << std::endl;cv::imwrite(savedfilename, dstImg);cout << "第" << i << "張完成" << endl;waitKey(30);}return 0; }

有些多余的頭文件可以不添加。

二、實現效果


resize后:

截取后的圖:


總結

以上是生活随笔為你收集整理的Opencv——批量处理同一文件夹下的图片(解决savedfilename = dest + filenames[i].substr(len)问题)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。