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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

svm 的提前处理

發布時間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 svm 的提前处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自原文:https://blog.csdn.net/chaipp0607/article/details/53914954

在應用OpenCV大量測試圖片時,需要對圖片批量的讀入并進行處理。之前處理這個問題時是使用這種方法:把待處理的圖片放到一個文件夾內,全選它們然后重命名1,這樣系統會自動給他們全部重命名為1(1),1(2),1(3)等等等
然后用下面的代碼把圖片讀進來:

for ( i=1;i<=624;i++)
{
sprintf_s(adr, “C:\Users\Administrator\Desktop\第二組截圖\1 (%d).jpg”,i);
Mat g_SrcImage;
g_SrcImage=imread(adr);
printf(“i=%d”,i);
}
這種方法很麻煩,需要手動重命名一遍,然后根據文件夾下的圖片個數確定循環中的值。有一種更簡便并且靈活性更高的方法,就是遍歷文件夾內所有圖片的路徑,名稱和總個數。
下面這種實現方式其實和OpenCV本身沒什么關系了,是一種應用C++提供的io.h頭文件中定義的函數實現。
先給出函數的定義:

void listFiles(const char * dir, vector& files);
1
可以看到函數沒有返回值,而是將遍歷到的文件信息存儲到vector中,完整的代碼實現如下:

#include
#include <io.h>
#include
#include
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

void listFiles(const char * dir, vector& files);

int main()
{
string path = “E:\facedata\faceReg”;
vector files;
listFiles(path.c_str(),files);
for (int i = 0; i < files.size();i++)
{
cout << files[i] << endl;
Mat SrcImage = imread(files[i]);
namedWindow(“show”, 0);
imshow(“show”, SrcImage);
waitKey(10);
}
waitKey(0);
return 0;
}
//目錄中的所有圖片(到每一級目錄)
void listFiles(const char * dir, vector& files)
{
char dirNew[200];
strcpy(dirNew, dir);
strcat(dirNew, “\.”); // 在目錄后面加上"\.“進行第一次搜索
intptr_t handle;
_finddata_t findData;
handle = _findfirst(dirNew, &findData);
if (handle == -1) // 檢查是否成功
return;
do
{
if (findData.attrib & _A_SUBDIR)
{
if (strcmp(findData.name, “.”) == 0 || strcmp(findData.name, “…”) == 0)
continue;
cout << findData.name << “\t

\n”;
// 在目錄后面加上”\“和搜索到的目錄名進行下一次搜索
strcpy(dirNew, dir);
strcat(dirNew, “\”);
strcat(dirNew, findData.name);
listFiles(dirNew, files);
}
else
files.push_back(string(dir).append(”\").append(findData.name));
cout << findData.name << “\t” << findData.size << " bytes.\n";
} while (_findnext(handle, &findData) == 0);
_findclose(handle); // 關閉搜索句柄
}
備注:
1.在上面的代碼中可以看到,listFiles函數其實在利用遞歸,這意味著,這個函數不僅僅可以找目錄中的文件,還可以找到目錄下每一層的文件,在大多數情況下并不需要區分是遍歷目錄下還是遍歷目錄中,因為目錄是我們自己創建的,要遍歷的路徑也是自己輸入,所以我們完全可以把這個當做遍歷目錄中文件的函數來用。
2.上述代碼在x64,x86平臺上都測試通過,之所以出現x86平臺運行正常,x64編譯通過,運行出現異常,是因為_findfirst()返回類型為intptr_t而非long型,從“intptr_t”轉換到“long”丟失了數據,所以創建句柄時需要:intptr_t handle;

總結

以上是生活随笔為你收集整理的svm 的提前处理的全部內容,希望文章能夠幫你解決所遇到的問題。

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