資源簡介
SVM應用實例:藥品(膠囊)識別與分類 SVM應用實例:藥品(膠囊)識別與分類 SVM應用實例:藥品(膠囊)識別與分類 SVM應用實例:藥品(膠囊)識別與分類

代碼片段和文件信息
/*
SVM應用實例:藥品(膠囊)識別與分類
*/
#include?
#include
#include
using?namespace?cv;
using?namespace?ml;
void?findSamplecontours(InputArray?src?OutputArrayOfArrays?contours);
//使用SVM進行膠囊分類
int?main()??
{??
????//樣本總類別數
const?int?classSum?=?6;
//每個樣本選取的特征個數
const?int?featureSum?=?3;
//訓練樣本總數
const?int?sampleSum?=?57;
//每種類別對應的名稱
const?std::string?labelName[6]?=?{“green_peru“?“brown“?“darkcyan“?“black“?“white_brown“?“saddlebrown“};
//訓練數據及標簽
Mat?trainDataMat?=?Mat::zeros(sampleSum?featureSum?CV_32FC1);
Mat?labelsMat?=?Mat::zeros(sampleSum?1?CV_32SC1);
int?k?=?0;
////========================創建訓練數據==================================////
for?(int?label?=?0;?label? {
//訓練圖像所在文件夾
std::string?path?=?“E:/image/image/classification/capsule/pills_class_“;
char?temp[256];
sprintf_s(temp?“%d“?label);
path?=?path?+?temp?+?“.png“;
Mat?src?=?imread(path);
if?(src.empty())
{
std::cout<<“can?not?load?image.?\n“< return?-1;
}
//imshow(“input“?src);
//獲取每個膠囊的輪廓
std::vector>contours;
findSamplecontours(src?contours);
for(int?i?=?0;?i? {
if(contourArea(contours[i])?>?50)
{
//建立掩模MASK
Mat?mask?=?Mat::zeros(src.size()?src.type());
drawContours(mask?contours?i?Scalar(255?255?255)?-1);
//獲得MASK對應區域的圖像
src.copyTo(maskmask);
//求各個通道的均值
Scalar?maskSum?=?sum(mask);
maskSum?=?maskSum/contourArea(contours[i]);
//取前三個通道即BGR通道的均值作為特征
for?(int?j?=?0;?j? {
trainDataMat.at(kj)?=?maskSum[j];
}
labelsMat.at(k0)?=?label;
k++;
}
}
}
std::cout<<“trainDataMat:?\n“< std::cout<<“labelsMat:?\n“<
////========================使用SVM訓練部分==================================////
Ptr?model?=?SVM::create();??
????model->setType(SVM::C_SVC);??
????model->setKernel(SVM::POLY);
????model->setDegree(1.0);
????model->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER1001e-6));?
????model->train(trainDataMatROW_SAMPLElabelsMat);?
////========================測試部分==================================////
Mat?testImg?=?imread(“E:/image/image/classification/capsule/pills_test.png“);
if?(testImg.empty())
{
std::cout<<“can?not?load?image.?\n“< return?-1;
}
std::vector>testContours;
findSamplecontours(testImg?testContours);
//對測試圖像中的樣本進行逐個判斷
for(int?i?=?0;?i? {
if(contourArea(testContours[i])?>?50)
{
Mat?testDataMat?=?Mat::zeros(1?featureSum?CV_32FC1);
Mat?testLabelsMat;
Mat?testMask?=?Mat::zeros(testImg.size()?testImg.type());
drawContours(testMask?testContours?i?Scalar(255?255?255)?-1);
testImg.copyTo(testMasktestMask);
//求各個通道的均值
Scalar?testMaskSum?=?sum(test
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5020??2018-02-07?11:24??main.cpp
?????文件?????268301??2013-02-15?19:08??capsule\pills_class_0.png
?????文件?????264150??2013-02-15?19:08??capsule\pills_class_1.png
?????文件?????265601??2013-02-15?19:08??capsule\pills_class_2.png
?????文件?????276180??2013-02-15?19:08??capsule\pills_class_3.png
?????文件?????278478??2013-02-15?19:08??capsule\pills_class_4.png
?????文件?????261237??2013-02-15?19:08??capsule\pills_class_5.png
?????文件?????352396??2018-02-05?20:49??capsule\pills_test.png
?????目錄??????????0??2018-02-06?15:55??capsule
-----------?---------??----------?-----??----
??????????????1971363????????????????????9
- 上一篇:HappyEO電子琴 破解版綠色版
- 下一篇:LPC1768技術手冊
評論
共有 條評論