OpenCv3.0+SVM的使用心得(二)

主要有4点总结:
1.
读取txt的内容(文件路径),按行输出。下面语句中,pictures.txt中是文件夹中的文件(图片)列表,samplePath是文件夹路径(string格式)。string和char类型可以使用‘+’连接。

char positiveImgName[256];
fream f;
f.open("D:\\pictures.txt",ios::in);
while (!f.eof())
{
    f.getline(positiveImgName,256,'\n');
    string picturePath=samplePath+positiveImgName;
}

2.
对于某些样本照片,可能大小不如我们所愿,因此要对其进行截取。
我们可以从Mat类型中提取矩形区域:

cv::Mat bigImage=cv::Mat::zeros(cv::Size(660,350));
cv::Mat smallImage=cv::Mat(bigImage,cv::Rect(0,0,110,70));

但是,需要注意这么做并没有复制图像数据,仅仅为同样的image data创建了另一个wrapper。如果需要复制数据,需要用:

cv::Mat smallImage = cv::Mat(bigImage, cv::Rect(0,0,110,70)).clone();

如果需要图像中多个不同大小的部分,需要将图像用网格划分,比如:

cv::Size smallSize(110,70);
std::vector<Mat> smallImages;

for (int y = 0; y < bigImage.rows; y += smallSize.height)
{
    for (int x=0; x < bigImage.cols; x += smallSize.width)
    {
        cv::Rect rect =cv::Rect(x,y,smallSize.width, smallSize.height);
        smallImages.push_back(cv::Mat(bigImage, rect));
    }
}

在图像处理中,样本的处理需要使用第二中复制数据的方式。

3.
使用dir\b>picture.lst命令行获取一个文件夹内所有文件的文件名,会在文档的最后多产生一个空行。

4.
训练出来的SVM classifier的support vector是以Mat类型进行存储,其rows是根据svm的参数而变化的,如果是二分类分类器,应该是1*n的大小。如果和规划的不一致,去查看训练数据是否有误(是否有些label未赋值等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值