-
大小: 32.48MB文件類型: .rar金幣: 1下載: 0 次發(fā)布日期: 2023-06-13
- 語言: 其他
- 標(biāo)簽:
資源簡(jiǎn)介
基于opencv-KNN最鄰近算法實(shí)現(xiàn)手寫數(shù)字識(shí)別,使用Qt做UI實(shí)現(xiàn)手寫板,可以實(shí)時(shí)測(cè)試,資源包含源代碼和可執(zhí)行程序(release文件夾下的exe文件可以直接運(yùn)行)
代碼片段和文件信息
#include?“Knn.h“
Knn::Knn(QWidget?*parent)
:?QWidget(parent)
{
ui.setupUi(this);
ui.bRecognize->setEnabled(false);
connect(ui.bTrain ?SIGNAL(clicked())?this?SLOT(onTrain()));
connect(ui.bRecognize ?SIGNAL(clicked())?this?SLOT(onRecognize()));
connect(ui.bClear ?SIGNAL(clicked())?this?SLOT(onClearImage()));
onClearImage();
}
void?Knn::onTrain(){
Mat?digitsSet?=?imread(“digits.png“);
Mat?gray;
cvtColor(digitsSet?gray?CV_BGR2GRAY);
threshold(gray?gray?0?255?CV_THRESH_BINARY);
//?digits.png為2000?*?1000,其中每個(gè)數(shù)字的大小為20?*?20,則總共有5000((2000*1000)?/?(20*20))個(gè)數(shù)字
//?對(duì)其分割成單個(gè)20?*?20的圖像并序列化成(轉(zhuǎn)化成一個(gè)一維的數(shù)組)
int?side?=?20;
int?m?=?gray.rows?/?side;
int?n?=?gray.cols?/?side;
Mat?data?labels;
for?(int?i?=?0;?i?
ui.lState->setText(QString(“Trainning?%1“).arg(i/5));
int?offsetRow?=?i?*?side;
for?(int?j?=?0;?j?
int?offsetCol?=?j?*?side;
//?截取20*20的小塊
Mat?tmp;
gray(Range(offsetRow?offsetRow?+?side)?Range(offsetCol?offsetCol?+?side)).copyTo(tmp);
data.push_back(tmp.reshape(0?1));??//?序列化轉(zhuǎn)換成一個(gè)一維向量
labels.push_back(i?/?5);
QImage?image?=?CvMat2QImage(tmp);
QPixmap?pixmap?=?QPixmap::fromImage(image);
ui.label->setPixmap(pixmap.scaled(ui.label->size()));
sleep(1);
}
}
data.convertTo(data?CV_32F);
//?使用KNN算法訓(xùn)練
int?K?=?51;
Ptr?tData?=?TrainData::create(data?ROW_SAMPLE?labels);
model?=?KNearest::create();
model->setDefaultK(K);
model->setIsClassifier(true);
model->train(tData);
ui.bRecognize->setEnabled(true);
ui.bTrain->setEnabled(false);
ui.lState->setText(“Train?OK!“);
}
void?Knn::onRecognize(){
ui.bRecognize->setEnabled(false);
Mat?zoom;
zoom?=?zoomImage(0.1?frame);
Mat?reshapeImage?=?zoom.reshape(0?1);
reshapeImage.convertTo(reshapeImage?CV_32F);
float?r?=?model->predict(reshapeImage);???
ui.labelResult->setText(QString(“%1“).arg(r));
ui.bRecognize->setEnabled(true);
}
void?Knn::onClearImage(){
frame?=?Mat::zeros(200?200?CV_8UC1);
QImage?image?=?CvMat2QImage(frame);
QPixmap?pixmap?=?QPixmap::fromImage(image);
ui.label->setPixmap(pixmap.scaled(ui.label->size()));
}
QImage?Knn::CvMat2QImage(const?cv::Mat&?mat){
if?(mat.type()?==?CV_8UC1){
QImage?image(mat.cols?mat.rows?QImage::Format_Indexed8);
image.setColorCount(256);
for?(int?i?=?0;?i?256;?i++){
image.setColor(i?qRgb(i?i?i));
}
uchar?*pSrc?=?mat.data;
for?(int?row?=?0;?row? uchar?*pDest?=?image.scanLine(row);
memcpy(pDest?pSrc?mat.cols);
pSrc?+=?mat.step;
}
return?image;
}
else?if?(mat.type()?==?CV_8UC3){
const?uchar?*pSrc?=?(const?uchar*)mat.data;
QImage?image(pSrc?mat.cols?mat.rows?mat.step?QImage::Format_RGB888);
return?image.rgbSwapped();
}
else?if?(mat.type()?==?CV_8UC4){
const?uchar?*pSrc?=?(const?uchar*)mat.data;
QImage?image(pSrc?mat.cols?mat.rows?mat.step?QIma
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????1463??2018-03-28?16:22??KNN數(shù)字識(shí)別\Knn\Debug\Knn.Build.CppClean.log
?????文件?????????86??2018-03-28?16:22??KNN數(shù)字識(shí)別\Knn\Debug\Knn.log
?????文件?????721129??2014-11-06?08:49??KNN數(shù)字識(shí)別\Knn\digits.png
?????文件???????1372??2018-03-28?16:24??KNN數(shù)字識(shí)別\Knn\GeneratedFiles\qrc_Knn.cpp
?????文件???????3681??2018-03-28?16:24??KNN數(shù)字識(shí)別\Knn\GeneratedFiles\Release\moc_Knn.cpp
?????文件???????5495??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\GeneratedFiles\ui_Knn.h
?????文件???????5341??2018-03-28?16:20??KNN數(shù)字識(shí)別\Knn\Knn.cpp
?????文件???????1244??2018-03-28?16:04??KNN數(shù)字識(shí)別\Knn\Knn.h
?????文件?????????63??2018-03-27?14:41??KNN數(shù)字識(shí)別\Knn\Knn.qrc
?????文件???????4780??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Knn.ui
?????文件??????10438??2018-03-28?16:24??KNN數(shù)字識(shí)別\Knn\Knn.vcxproj
?????文件???????2910??2018-03-27?14:41??KNN數(shù)字識(shí)別\Knn\Knn.vcxproj.filters
?????文件????????713??2018-03-28?08:09??KNN數(shù)字識(shí)別\Knn\Knn.vcxproj.user
?????文件????????177??2018-03-27?14:40??KNN數(shù)字識(shí)別\Knn\main.cpp
?????文件???????4273??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.log
?????文件?????200837??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.obj
?????文件???????6198??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.tlog\cl.command.1.tlog
?????文件?????124022??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.tlog\CL.read.1.tlog
?????文件????????690??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.tlog\CL.write.1.tlog
?????文件???????2092??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.tlog\custombuild.command.1.tlog
?????文件????????402??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.tlog\custombuild.read.1.tlog
?????文件????????510??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.tlog\custombuild.write.1.tlog
?????文件????????154??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.tlog\Knn.lastbuildstate
?????文件???????1736??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.tlog\li
?????文件???????3800??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.tlog\li
?????文件????????420??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\Knn.tlog\li
?????文件?????113609??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\main.obj
?????文件?????112845??2018-03-28?16:29??KNN數(shù)字識(shí)別\Knn\Release\moc_Knn.obj
?????文件???????2137??2018-03-28?16:24??KNN數(shù)字識(shí)別\Knn\Release\qrc_Knn.obj
????..A..H.????????42??2018-03-28?15:46??KNN數(shù)字識(shí)別\Knn.opensdf
............此處省略40個(gè)文件信息
- 上一篇:C和指針(高清PDF)
- 下一篇:DiskGeniusX86X64.rar
評(píng)論
共有 條評(píng)論