• 大小: 1.88MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-31
  • 语言: 其他
  • 标签: SVM  药品  

资源简介

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 < classSum; 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 < contours.size(); 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 < featureSum; 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 < testContours.size(); 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


评论

共有 条评论