当前位置:  编程技术>移动开发
本页文章导读:
    ▪找寻波形顶点的简易算法        寻找波形顶点的简易算法本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!     最近有空,继续业余地研究穿戴设备的传感器,尝试了几类常见的脉搏传感器:心电传感器容易收到皮.........
    ▪ fedora15 停openc搭建        fedora15 下openc搭建 过程如下: 第一 、安装gtk2-devel、ffmpeg-devel openjpeg-devel、libpng-devel库 命令:yum install cmake gtk2-devel ffmpeg-devel openjpeg-devel libpng-devel  -y 第二、下载OpenCV-2.3.1a.tar.bz2  .........
    ▪ 关于批改 AchartEngine 源码的修改       关于修改 AchartEngine 源码的修改因为公司的这个项目是用 google 的第三方图标绘制工具  AchartEngine进行绘制的, 但是 因为最后 不满足测试 和需要 的 要求,需要重新按照别的要求来做,在查.........

[1]找寻波形顶点的简易算法
    来源: 互联网  发布时间: 2014-02-18
寻找波形顶点的简易算法

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!


     最近有空,继续业余地研究穿戴设备的传感器,尝试了几类常见的脉搏传感器:心电传感器容易收到皮电摩擦干扰,压力传感器受力太明显而戴着不舒服,唯有光电脉搏传感器略好,同样受到运动干扰但有效信号依然较强(选择正确的发射/接收管很重要)。本文所设计的传感器可以实现运动中检测脉搏并且佩戴位置不局限于手指(手背 、 大腿等)...已在模拟电路上做抗工频干扰、信号放大等处理,在MCU上只需要做简单的滤波和寻找波形顶点即可算出脉搏数。
     下图上方是传感器采集的波形,下方是运算的结果,采集和运算都在MCU中进行,手机只做绘制波形。


接下来贴出寻找波形顶点的算法和使用Main()入口,写的比较简单,不喜勿喷....
#include <stdio.h>
#include <stdlib.h>


//---------------------------------------------
#define Y_LENGTH_MIN 1 //中点与起点的Y轴距离的最小值
#define MIDDLE_POS 4 //区间内顶点的位置
#define TOP_N (MIDDLE_POS*2)+1 //缓冲数组的SIZ
short top_value_buf[TOP_N];//缓冲数组
short top_i = 0;//计数器,当top_i = TOP_N就开始算出是否存在顶点

/**
 * 判断区间内是否出现波形顶点
 * 先得到一个区间(缓冲数组),再判断中点是否波形顶点,区间用类队列的形式更新
 */
short exist_top(short value) {
	//保存缓冲数据
	if (top_i < TOP_N) {
		top_value_buf[top_i] = value;
		top_i++;
	}
	else {//缓冲数据存满后,首元素去掉,末尾赋新值
		int i = 0;
		for (; i < TOP_N - 1; i++) {
			top_value_buf[i] = top_value_buf[i + 1];
		}
		top_value_buf[TOP_N - 1] = value;
	}

	//------------------------------------------
	if (top_i == TOP_N) {
		short middle = top_value_buf[MIDDLE_POS];

		//避免中点附近是相同值,中点附近有相同值会影响判断最高点
		if(middle == top_value_buf[MIDDLE_POS+1])
			top_value_buf[MIDDLE_POS+1]--;

		//中点是否比起点高足够距离
		short duration = middle - top_value_buf[0];
		if (duration < Y_LENGTH_MIN) {
			return 0;
		}

		//判断中点是否最高
		int i = 0;
		for (; i < TOP_N; i++) {
			if (top_value_buf[i] > middle) {
				return 0;
			}
		}

		//重要:避免附近有多个相同值(导致判断最高点出错),将首个最高点拔高
		middle++;
		top_value_buf[MIDDLE_POS]=middle;

		return middle;//中点是波形顶点,返回波形顶点数值
	}
	return 0;//未找到波形顶点
}

//------------------------------------------------------
int main(int argc, char *argv[]) {
	int temp[22] = { 181, 182, 183, 184, 290, 1, 102, 104, 106, 191, 180, 181,
			182, 183, 184, 222, 201, 192, 194, 196, 191, 180 };

	int i = 0;
	for (; i < 22; i++) {
		printf("Number: %d ", temp[i]);
		printf("result: %d ", exist_top(temp[i]));
		printf("\r\n");
	}

	system("PAUSE");
	return 0;


    本文通过宏定义微调运算细节,实际开发中,不会全部使用宏定义调节运算细节,细节变量需要由自适应算法来调整。另外,本文的算法会有运算滞后,滞后由上面代码中MIDDLE_POS的决定,MIDDLE_POS数值越大滞后越大,因为是从数组区间(区间size=(MIDDLE_POS*2)+1)中计算波形顶点。

    这个C程序运行的结果如下,这里波形顶点都被+1,避免附近有多个相同值(导致判断最高点出错),因此将首个最高点拔高:


    
[2] fedora15 停openc搭建
    来源: 互联网  发布时间: 2014-02-18
fedora15 下openc搭建

过程如下:

第一 、安装gtk2-devel、ffmpeg-devel openjpeg-devel、libpng-devel库
命令:yum install cmake gtk2-devel ffmpeg-devel openjpeg-devel libpng-devel  -y

第二、下载OpenCV-2.3.1a.tar.bz2  将其复制到home目录下

解压缩:tar xvf OpenCV-2.3.1a.tar.bz2

出现OpenCV-2.3.1文件夹

第三、创建relesae 放置makefile文件

命令:cd OpenCV-2.3.1

命令:mkdir release //创建文件目录

第四、接着可以在release文件夹里创建Makefile

命令:cd release 

命令:cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON ..

第五、安装

命令:make

命令:su

命令:make install

第六、设置库路径

创建文件opencv.conf

命令:vi /etc/ld.so.conf.d/opencv.conf

输入/usr/local/lib,并保存退出

第七、设置环境变量

命令:vi  /etc/profile

在末尾加入:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

更新环境变量  命令:$ source /etc/profile

第八、设置另外环境变量:

命令:vi  /etc/bashrc

在末尾加入:

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

更新环境变量    

命令:source /etc/bashrc

第九、然后更新系统库缓存   

命令:# ldconfig

第十、查看opencv包是否安装成功

命令:# pkg-config --cflags opencv

# pkg-config --libs opencv

说明成功

第十一、运行人脸识别测试程序:

命令:cd /home/ OpenCV-2.3.1/samples/c/

命令:chmod +x build_all.sh

命令:./build_all.sh

命令:./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg  出现文章开头处的样式。

参考博文:

http://blog.puretone.info/?p=24

http://www.opencv.org.cn/forum/viewtopic.php?t=14610

http://www.eefocus.com/DSP_geek/blog/10-12/200665_09816.html

http://www.samontab.com/web/2010/04/installing-opencv-2-1-in-ubuntu/

http://apps.hi.baidu.com/share/detail/39643293



    
[3] 关于批改 AchartEngine 源码的修改
    来源: 互联网  发布时间: 2014-02-18
关于修改 AchartEngine 源码的修改

因为公司的这个项目是用 google 的第三方图标绘制工具  AchartEngine进行绘制的,

但是 因为最后 不满足测试 和需要 的 要求,需要重新按照别的要求来做,在查了很多资料 真心没有发现用来设置的,所以没有办法,还是要做,所以决心把源码下载下来看看能否实现。

下载下来后真心发现: 好吧。我要好好学英文了 = =

先简单说说人家要求的样子吧。

那张图在公司电脑上 = =,跟这个一样的,



反正就是 -1. (曲线,每个点是空心的  -   确切的说也不能算是空心的,因为他的背景是白色的,里面填充白色的,有带色的边  )

                  2.   需要修改下面的图例文字的位置,因为这个人家是写好跟着  XY 轴的0 走的

                  3.  X  Y轴的线太细了。需要加粗1点 = =  忍

 先上张 官方demo的图 -别的图不上了。只是说明问题。


 

好了,现在要解决2个问题。               1. 移动下面图例的文字(其实我真心觉得在左边挺好的)  2. 修改圆形的图点变成空心(类似= =)


1. 现在打开源码看看下。

   因为在写 这个图表的时候有个方法是设置这个图例文字大小的

	renderer.setLegendTextSize(10);                    // 图例文字的大小--下面分类的字体大小

这个是工程目录:


因为我的英文也不是很好嘛= =,所以就按照这个 名字去找了


(找的过程就不多说了)然后找到了这个文件下面的这个方法,一看一眼就知道了啦。 -  drawlegend (画图例) 所以肯定在这里设置啦。

至于你爱怎么设置就怎么设置。我  left + 90只是 提供一种方法

然后运行:



二  . 然后到了解决第2个问题,确实很头疼。

我首先想到的是 设置空心属性嘛, 直接画成空心的不就好了。(可是真心不是人家给的效果图就变成下边的样子了,后面的线条还会露出来)


找到 XYchart ,这种 XY轴的图标绘制(名字命的好,真心好找) 看到他的draw()




然后里面有个  drawSeries(这个顾名思义。就是画每条线嘛)然后看这个方法:




接下来就看到了 pointChart (画点ye,感觉离成功不远了,连接进去看)进到了:




然后看到 case:  一眼就看出来哦了

继续跟到  drawCircle里面去看看:


源码只有1句话(那就是 画点,)好了为了实现我的效果,那我就要开始对 paint进行设置了。对于渲染类shader我前面提到过了。

然后画完点,就去掉自己的 shader以免影响到别的(因为我没去掉看到了很恐怖的效果 = =)

然后效果图:(我渲染成了白内心,外面是线条颜色的圆圈,白里子是因为 我们的那个背景是白色的):


好了,圆圈变了。


三 , 现在要变 X Y 轴的 线条的粗细。

这个真心也找了半天,因为有时候动一出 ,很多地方就动了

,然后还有1个问题就是。原来项目里面的线是 折线图,然后项目是1个 linear.add() 这个折线图返回来的 View的

GraphicalView view= ChartFactory.getLineChartView(context, buildDataset(titles, x, values), renderer);//返回曲线图view

然而根据测试和 需求提出的,那个根本就是要返回曲线图的 view

但是没有这个方法:


曲线图只给 返回1个 intent 跳进去啊= =,

这样的话,我就根据他的 ChartFactory 的类 添加了1个自己返回 曲线view的方法(这样就可以add到自己的layout里面了):


这样我就可以得到 曲线图的 view了进行调用,然后跟进去 GraphicalView 

看到了里面的1个 ondraw方法,那肯定就是开始绘画 view了

然后我更改了paint.的大小,随便点开1个= =, 就贴一张图吧。最起码知道位置找对了, XY 的大粗细确实变了


然后根据他里面的 draw方法又连接进到了(看到 drawBackage我高兴了,这画背景啊, 我就在drawBackage完后把画笔加粗清空了)


结果发现 Y X变细,说明 drawbackage就没有画xy和线条 


接下来继续找。

然后看到 drawpath 改变了画笔的大小,可以是可以, 但是有一些的 XY 会变粗, 并且连带点也会变粗,一些则是 线条会变很粗,错的

所以我就按照刚才的顺序,在drawBackage中既然没画XY, 继续到了 drawlegend(画图例,我在画完图例之后加粗画笔)



好了看效果图吧:

好了都变粗了,其他的肯定问题还是有的。需要把画笔的加粗清空,自己清吧= =


然后把整体的修改完运行成jar 放到工程里面:

再吐槽一下 设计这个界面的 需求,图没有截全就大概看个效果吧。



其实那些类  你都可以自己继承了以后,再改写。

我这里只是提供了一种方式,当时要的着急。

所以就基本跟给的效果图是一致的了。1. 下面的图例往中间放。 2. XY 加粗了1点点= =  3。曲线的样式

当然还能再基础上扩展, 比如X Y轴用提供的1张图片代替。因为 现在XY轴的样子确实是有局限性。


转载请保留地址谢谢。

                                                           


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3