資源簡介
利用opencv對數碼管進行識別,主要利用knn算法對數據進行訓練

代碼片段和文件信息
#include
#include
#include
#include
#include
#include
using?namespace?std;
using?namespace?cv;
using?namespace?cv::ml;
bool?cmp(const?Rect?&a?const?Rect?&b);
vector?get_mats(Mat?mt);
bool?has_Point(Mat?mt);
int?main(){
string?changename(int?iint?j);
string?get_name(int?i);
Mat?traindata?train_label?tmp;
for?(int?j?=?0;?j?10;?j++){
for?(int?i?=?0;?i?40;?i++){
string?name?=?changename(ji);
//cout?< tmp?=?imread(name?0);
resize(tmp?tmp?Size(75?125));
traindata.push_back(tmp.reshape(0?1));
train_label.push_back(j);
}
}
traindata.convertTo(traindata?CV_32F);
Ptr?tData?=?TrainData::create(traindata?ROW_SAMPLE?train_label);
Ptr?knn?=?KNearest::create();
knn->setDefaultK(3);
knn->setIsClassifier(true);
knn->train(tData);
Mat?mymt?=?imread(“f:/RecordedImage_GO-5000C-USB__000.tif“);
vector?dds=get_mats(mymt);
ostringstream?oss;
for?(int?n?=?0;?n?
dds[n].copyTo(tmp);
resize(tmp?tmp?Size(75?125));
tmp?=?tmp.reshape(0?1);
tmp.convertTo(tmp?CV_32F);
int?result?=?knn->predict(tmp);
oss?< if?(has_Point(dds[n]))?oss?<“.“;
}
cout?<}
string?changename(int?iint?j){
ostringstream?oss;
oss?<<“f:/“< string?name?=?oss.str();
return?name;
}
string?get_name(int?i){
ostringstream?oss;
oss?<“f:/tmp/“?< return?oss.str();
}
vector?get_mats(Mat?mt){
vector?channelsresult_datas;
Mat?image_bin?result?ele?image_bin2?temp;
split(mt?channels);
//閾值選取很重要
threshold(channels[2]?image_bin2?50?255?THRESH_BINARY);
ele?=?getStructuringElement(MORPH_RECT?Size(5?5));?//?膨脹
dilate(image_bin2?image_bin?ele);
image_bin.copyTo(temp);
vector>?conts;
vector?hire;
//輪廓提取
findContours(image_bin?conts?hire?RETR_EXTERNAL?CHAIN_APPROX_NONE);
vector?rects;
vector?datas;
temp.copyTo(image_bin);
//threshold(mtimage_bin150255THRESH_BINARY);
for?(int?i?=?0;?i Rect?t?=?boundingRect(Mat(conts[i]));
if?(t.width<40?||?t.height<50)?continue;
rects.push_back(t);
//rectangle(mtt(255255255));
}
//?imshow(“kkkl“mt);
//sort?numbers
sort(rects.begin()?rects.end()?cmp);
//cut?pictures
for?(int?i?=?0;?i
image_bin(rects[i]).copyTo(result);
result_datas.push_back(result);
//?datas.push_back(result);
}
return?result_datas;
}
bool?cmp(const?Rect?&a?const?Rect?&b){
if?(a.x return?true;
}
else{
return?false;
}
}
//取5X5方塊檢驗小數點
bool?has_Point(Mat?mt){
int?with?=?mt.rows;
int?height?=?mt.cols;
Rect?r(height?-?5?with?-?5?5?5);
mt(r).copyTo(mt);
Mat_::iterator?i
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-01-10?23:34??ConsoleApplication3\
?????目錄???????????0??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\
?????文件????14811136??2018-01-10?23:34??ConsoleApplication3\ConsoleApplication3.sdf
?????文件????????1003??2018-01-10?12:58??ConsoleApplication3\ConsoleApplication3.sln
?????文件???????17408??2018-01-10?23:34??ConsoleApplication3\ConsoleApplication3.v12.suo
?????文件????????4347??2018-01-10?13:03??ConsoleApplication3\ConsoleApplication3\ConsoleApplication3.vcxproj
?????文件?????????946??2018-01-10?13:03??ConsoleApplication3\ConsoleApplication3\ConsoleApplication3.vcxproj.filters
?????目錄???????????0??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\
?????目錄???????????0??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\ConsoleA.90DD938F.tlog\
?????文件?????????880??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\ConsoleA.90DD938F.tlog\cl.command.1.tlog
?????文件???????11496??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\ConsoleA.90DD938F.tlog\CL.read.1.tlog
?????文件?????????936??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\ConsoleA.90DD938F.tlog\CL.write.1.tlog
?????文件?????????214??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\ConsoleA.90DD938F.tlog\ConsoleApplication3.lastbuildstate
?????文件????????1648??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\ConsoleA.90DD938F.tlog\li
?????文件????????2646??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\ConsoleA.90DD938F.tlog\li
?????文件?????????912??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\ConsoleA.90DD938F.tlog\li
?????文件????????3301??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\ConsoleApplication3.log
?????文件??????624955??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\hello.obj
?????文件??????527360??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\vc120.idb
?????文件??????995328??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\Debug\vc120.pdb
?????文件????????3237??2018-01-10?23:33??ConsoleApplication3\ConsoleApplication3\hello.cpp
?????目錄???????????0??2018-01-10?23:27??ConsoleApplication3\Debug\
?????文件??????159744??2018-01-10?23:33??ConsoleApplication3\Debug\ConsoleApplication3.exe
?????文件?????1209304??2018-01-10?23:33??ConsoleApplication3\Debug\ConsoleApplication3.ilk
?????文件?????2231296??2018-01-10?23:33??ConsoleApplication3\Debug\ConsoleApplication3.pdb
?????文件?????7134203??2018-01-10?23:32??RecordedImage_GO-5000C-USB__000.tif
?????文件????????9896??2018-01-10?23:34??捕獲.PNG
- 上一篇:企業進銷存系統源代碼(B/S結構)
- 下一篇:易康ecognition培訓教程
評論
共有 條評論