Android 图像处理软件

在机器视觉实验室呆了有一年半时间了,但由于自己“任性”。一直以来学习的内容都是自己来安排,我还是坚持认为没有最好和最简单的技术,只有自己喜欢的技术。不过说起来还是会觉得惭愧,经常听到师兄们谈论图像处理各种算法,可是一直到此软件诞生之前对机器视觉的知识可以说一概不知。自己研究的主要是Android系统的东西,从上层到下层都有所涉及。一直以来都想把自身所长和实验室主题联系上,这样可以多和实验室牛人沟通,也顺便刷刷存在感~由此向师兄师弟们请教一二,学了一点图像处理技术,做了一款Android平台的图像处理工具,可以帮助用户快速实时预览所要处理的图像在不同算法之下的结果。也由于本人所学算法太少,,今后学了更多之后也会慢慢加入到软件中,将软件功能壮大起来。

首先讲讲软件到目前为止可以实现的功能: * 开启手机相机预览图像 * 将采集到的图像转换成灰度图预览 * 将灰度图像经过Sobel转换后预览 * 对Sobel之后的图像进行二值化 * 二值化的过程中可以随时动态调整分割阈值 * 通过拍照按钮可以锁定图像,在按一次进行边缘提取

软件效果图如下:

首先是打开软件所看到的主界面:

然后点击菜单,切换到灰度图:

接着切换到Sobel变换

阈值为50的二值分割

最后进行边缘提取:

其中涉及到的算法有四个,具体的算法实现可以在软件源码中找到,点击下载源码

整个软件有3个类,也就三个不同的功能部分,其中MainActivity.java是主类,下面按照三个不同的功能成分对整个软件架构做一个详细的说明:

1、主界面

MainActivity.java :

首先是界面布局,主要是一个ImageView用于显示整个预览框,另外加上一个拍照按钮和一个菜单按钮,点击菜单按钮弹出菜单。最后如果当前请求二值化算法,则显示一个滑动进度条和一个文本输入框来动态调整阈值。代码如下:

===”.MainActivity” ><ImageView=”match_parent” /><Button===”@drawable/shutter”android:onClick=”onClick_takePic” /><ListView===><Button====”onClick_menu” /><EditText====”@android:color/holo_blue_bright”android:visibility=”gone” /><SeekBar====”240″android:visibility=”gone” /><View===”#444″ /><View==”#444″ /><View==”#444″ /></RelativeLayout>

接下来加入对菜单和拍照按钮事件的监听方法,如下:

(View view){if (isMenuVisible){listView.startAnimation(menuInvisible);listView.setVisibility(View.GONE);isMenuVisible = false;}else{listView.startAnimation(menuVisible);listView.setVisibility(View.VISIBLE);isMenuVisible = true;}}(View view) throws IOException{getScreen.takePic();//相机拍照}

其中菜单的显示我添加了一个透明度动画,让软件界面更柔和。透明度补间动画比较简单,在res/anim/目录下添加两个动画资源用于显示和消失,然后再单击事件中播放动画即可。 然后是对弹出来的菜单编写点击事件,这里我用ListView做的菜单,用listView.setOnItemClickListener()方法设置回调方法。代码如下:

listView.setOnItemClickListener(new OnItemClickListener(){(AdapterView<?> parent, View view,int position, long id){if (position == 3)// 灰度图则打开进度条{seekbar.setVisibility(View.VISIBLE);inputThreshold.setVisibility(View.VISIBLE);}else{seekbar.setVisibility(View.GONE);inputThreshold.setVisibility(View.GONE);}whichToDisplay = position;//切换算法}});

这里主要作用有两个:1、打开和关闭阈值进度条;2、切换用户点击的算法。当然,进度条打开之后也要有配套的监听程序,这里需要同时监听seekBar和editText两个控件,需要保持二者的同步,内容比较简单易懂,如下:

// 处理SeekBarseekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){(SeekBar arg0){thresholdValue = arg0.getProgress() > 255 ? 255 : arg0.getProgress();}(SeekBar arg0){}(SeekBar arg0, int arg1, boolean arg2){inputThreshold.setText(arg0.getProgress() + “”);}});// 处理EditTextinputThreshold.setOnEditorActionListener(new OnEditorActionListener(){(TextView v, int actionId,KeyEvent event){seekbar.setProgress(Integer.parseInt(inputThreshold.getText().toString()));return false;}});

好了,到这里基本上主界面的东西都考虑到了,下面是图像的获取部分。

2、获取相机图像并显示预览 不知道来年,会不会开出一地的记忆和忧愁。

Android 图像处理软件

相关文章:

你感兴趣的文章:

标签云: