Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识
时间:2014-05-22 08:18:14
收藏:0
阅读:418
处理特征数据 及 代码
本文地址: http://blog.csdn.net/caroline_wendy/article/details/26240241
输入文件:
1. 归一化后的特征文件, 第1列是标签, 其余列是特征;
2. 特征最大值向量文件: 前3列是标准格式, 其余列是最大值;
输出文件:
1. 符合SVM训练数据的特征格式;
2. Mat存储的标准XML文件;
代码:
/*
处理特征数据程序
By C.L.Wang
数据格式:
特征数据: 第1列是标签, 其余列是特征;
最大值数据: 前3列是标准格式, 其余列是最大值;
转换为: SVM通用格式, 训练SVM的model; 转换为OpenCV矩阵的存储Mat;
*/
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <opencv.hpp>
/*转换SVM数据格式*/
void transformSvmData (
const std::string _inputFileName, /*输入数据文件*/
const std::string _outputFileName, /*输出数据文件*/
const int _rows, /*行数, 自设*/
const int _cols /*列数, 自设*/
)
{
//const int rows (800); //行数, 自设
//const int cols (104); //列数, 自设
cv::Mat trainData = cv::Mat(_rows, _cols, CV_64FC1);
/*读取文件*/
std::ifstream file_data(_inputFileName);
if (file_data.fail()) {
std::cerr << "Failed to open the file!" << std::endl;
return;
}
for (int i=0; i<_rows; ++i) {
for (int j=0; j<_cols; ++j) {
file_data >> trainData.at<double>(i,j);
}
}
file_data.close();
/*转换SVM格式*/
std::ofstream svmData(_outputFileName);
for (int i=0; i<_rows; i++)
{
svmData << trainData.at<double>(i, 0) << " ";
for (int j=1; j<_cols-1; j++) { //少1行
svmData << j << ":" << trainData.at<double>(i, j) << " ";
}
svmData << _cols-1 << ":" <<
trainData.at<double>(i,_cols-1) << std::endl; //最后一行不加空格
}
svmData.close();
return;
}
/*转换归一化向量*/
void transformNormXML (
const std::string _maxFileName,
const int _cols /*列数, 自设*/
)
{
const int rows = 1;
//const int cols = 104; //列数, 自设
/*读取文件*/
cv::Mat normMat = cv::Mat(rows, _cols, CV_64FC1);
std::ifstream maxData(_maxFileName, std::ifstream::in);
if (maxData.fail()) {
std::cerr << "Failed to open the file!" << std::endl;
return;
}
for (int i=0; i<rows; ++i) {
for(int j=0; j<_cols; ++j){
maxData >> normMat.at<double>(i,j);
}
}
maxData.close();
/*写入XML*/
cv::FileStorage fileXml("normalization.xml", cv::FileStorage::WRITE);
fileXml << "normalization" << normMat; //标签
fileXml.release();
return;
}
int main()
{
const std::string input_file_name = "violence_norm_matlab.txt"; /*输入数据文件*/
const std::string output_file_name = "violence_norm_svm.txt"; /*输出数据文件*/
const int rows = 843; /*输入文件行数, 自设*/
const int cols = 102; /*输入文件列数, 自设*/
transformSvmData(input_file_name, output_file_name, rows, cols);
const std::string max_file_name = "violence_max_matlab.txt";
transformNormXML(max_file_name, cols+2); //和以前标准统一
std::cout << "Program Over! " << std::endl;
return 0;
}
评论(0)