Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识

处理特征数据 及 代码

本文地址: 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;
}

Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识,布布扣,bubuko.com

时间: 2024-10-07 20:19:50

Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识的相关文章

Android中使用Sqlite数据库 (二) 增删改查

定义接口 package com.example.android_db.service; import java.util.List; import java.util.Map; public interface PersonService { public boolean addPerson(Object[] params); public boolean deletePerson(Object[] params); public boolean updatePerson(Object[] p

深入分析:Android中app之间的交互(二,使用ComponentName)

在前一篇相关主题的博文中我们了解了如何使用Action来启动当前应用之外的Activity处理我们的业务逻辑,在本篇笔记中我在简单介绍一下使用ComponentName来与当前应用之外的应用进行交互. 在介绍Component之前,我们首先来了解ComponentName这个类:ComponentName与Intent同位于android.content包下,我们从Android官方文档中可以看到,这个类主要用来定义可见一个应用程序组件,例如:Activity,Service,Broadcast

Android中检测字符编码(GB2312,ASCII,UTF8,UNICODE,TOTAL——ENCODINGS)方法(二)

Intent intent = getIntent(); String contentUri = null; Uri uri =null; if (intent.getData() != null) { uri = intent.getData(); contentUri = "file".equals(uri.getScheme()) ? FileContentProvider.BASE_URI + uri.getEncodedPath() : uri.toString(); Str

Android中检测字符编码(GB2312,ASCII,UTF8,UNICODE,TOTAL——ENCODINGS)方法(一)

package com.android.filebrowser; import java.io.*; import java.net.*; public class FileEncodingDetect { static final int GB2312 = 0; static final int ASCII = 1; static final int UTF8 = 2; static final int UNICODE = 3; //static final int GBK = 4; //st

android 中遇到 imageView getWidth 始终为0 时 ,设置 setImageBitmap 的方法

先说说我的遇到的问题: 1. 我在activity里写一个 fragment 2.这个fragment里有个 imageView ,用于显示图片. 我使用 asyncTask获得图片,并准备在这个imageView 中显示该图片的缩略图,我准备使用  ThumbnailUtils.extractThumbnail 方法生成缩略图. 我们先看看ThumbnailUtils.extractThumbnail(source, width, height);  这个方法的参数   source 源文件(

Android jni/ndk编程二:jni数据类型转换(primitive,String,array)

一.数据类型映射概述 从我们开始jni编程起,就不可能避开函数的参数与返回值的问题.java语言的数据类型和c/c++有很多不同的地方,所以我们必须考虑当在java层调用c/c++函数时,怎么正确的把java的参数传给c/c++函数,怎么正确的从c/c++函数获取正确的函数返回值:反之,当我们在c/c++中使用java的方法或属性时,如何确保数据类型能正确的在java和c/c++之间转换. 回顾我们上一篇文章中的那个c函数: #include <stdio.h> #include <jn

Android中的context的学习理解

Android中Context的学习理解Context是一个抽象基类,通过它getResuources.getAssets and start 其他组件(Activity,Service,broadCast,getSystemService),可以这样理解:Context提供了一个运行环境for App, then app 可以访问资源,才能完成与其他组件,服务的交互,Context定义了一套基本的功能接口or一套规范 //todo

Android笔记(三十) Android中的异步更新(二) Handler

什么是Handler 之前说过了,Android不允许主线程(MainThread)外的线程(WorkerThread)去修改UI组件,但是又不能把所有的更新UI的操作都放在主线程中去(会造成ANR),那么只能单独启动一个子线程(WorkerThread)去处理,处理完成之后,将结果通知给UI主线程,子线程和主线程的通信就用到了Handler. Handler.Looper和MessageQueue的基本原理 先看一下他们的职责: Handler——处理者,负责发送以及处理Message. Me

Android有关JNI 学习(两)为JNI方法名称,数据类型和方法签名的一些知识

我们知道,使用javah产生c/c++当在头文件,将java定义 native 功能,以产生相应jni层功能,如下面: /* * Class: com_lms_jni_JniTest * Method: getTestString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_lms_jni_JniTest_getTestString (JNIEnv *, jobject); 我们能够看到方法名是以