枚举类型enmu使用技巧

工程目的

在工程中经常会使用enum枚举类来表示工程中所需要的事件、情况、类别,尤其对于分类、检测,故而记录下其使用技巧。

enum的定义

这里使用enum定义一个分类网络的label :

enum PlateType
{
    CommonBluePlate           = 0,       
    CommonYellowPlate         = 1,     
    DoubleYellowPlate         = 2,      
    NewEnergyBigCarPlate      = 3,       
    PlateTypeUnknow           = 99,     
};

enum的使用

typedef struct
{
    PlateType plateType; // 定义 枚举类
    float score;
}PlateClasses;//使用一个结构体来表示网络分类的结果

//PlateType plateType 赋值

int PlateClassify::process(const cv::Mat& img, PlateClasses& result)
{
    std::vector<float> ret;
    std::vector<int> ouputShape;

    const float* data = m_net->process(img);
    m_net->getOutputShape(ouputShape);
    int step = ouputShape[1];
    ret.insert(ret.begin(),data, data+step);

    float result_max = 0;
    for(int j = 0; j < ret.size(); j++)
    {
        if(ret[j] > result_max)
        {
            result_max = ret[j];
            result.plateType = PlateType(j);  //通过分类结果进行赋值
            result.score = result_max;
        }
    }
}

输出分类结果enum变量字符

常用的方法有:使用数组和宏,这里记录宏的使用

#define Enum_chip_type_case(x) case x: return(#x);
static inline const char *enum_chip_type_string(enum PlateType x)
{
    switch (x)
    {
        Enum_chip_type_case(CommonBluePlate)
        Enum_chip_type_case(CommonYellowPlate)
        Enum_chip_type_case(DoubleYellowPlate)
        Enum_chip_type_case(NewEnergyBigCarPlate)
        Enum_chip_type_case(PlateTypeUnknow)
    }
    return "Unsupported Chip";
}
int main() {
    std::string testFolder = './file';
    std::vector<std::string> imageFiles;
    getImageFiles(testFolder,imageFiles);
    PlateClassify Instance = PlateClassify::getInstance();
    for(auto item : imageFiles)
    {
        cv::Mat img = cv::imread(item);
        PlateClasses result;
        Instance.process(img, result);
        std::cout<<item<<'\t'<<enum_chip_type_string(result.plateType)<<'\t'<<result.score<<"**"<<std::endl;  //输出分类结果字符
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值