0%

写在前面

寒假(假装)看完《数据结构与算法分析》之后决定是时候开始做LeetCode的题目了,在这里记录下一些LeetCode过程中遇到的坑,做LeetCode不仅是对算法的一种考验,也是对Java基础知识的一种考查,在Java基础并不是太好的现在做一定会漏洞百出,在这里统一做一个记录,也会写下对一些题目的想法。

阅读全文 »

2016年度总结

写在前面

许多人在跟我聊天的时候感慨,时间怎么过得这么快,不知不觉自己就是二十多的人了,过几年就要奔三了。相反地,我却觉得时间过得却不是那么快,因为自己确实在随着时间而改变,而且这样的改变是自己实实在在可以感受到的。从初中开始过来的这几年,可以说是一年一个样子,每次翻看自己一年前写的东西都会看到当时的幼稚与无知,自己也有着许许多多的习惯、看法、认识在随着时间推移在改变着。

而2016年是对身边每一个像我一样的新生都十分关键的一年,经历了身份、时空的转变,带来的是各种观念的迅速变化,但感到庆幸的是我并不惧怕改变。

这大概就是这段时间的必然,我们在快速成长着,不断地丢下之前的想法,不断获取新的东西与认知,不知道这样的改变还会持续多久,但是可以确定的是我确实是在朝着对的方向成长着。

之前的习惯是在每年生日的时候写下一些东西作为记录,但是今年因为忙碌而落下了,在学期结束的时候正好自己所在的两个团队都要求有一篇总结,虽然分别是年度的和学期的,我还是一并写成年度的,大概高中时期的那些种种在现在看来毕竟是过去了,所以这篇总结会分成两部分,先是来华科前的时期,主要内容在来华科后的时期。作为一篇写给别人看的总结就不包含那些生活上的东西了。

阅读全文 »

说明

在开始说明直线检测过程前先作个说明,由于直线检测的算法需要遍历每个像素,所以总的耗时比较长,在安卓上跑的时候直线检测的时间可能会长达两分钟,这是在测试过程中不能接受的,所以我将安卓上的代码整个迁移到了Idea中,关于Idea中OpenCV的配置,可以参见这个教程

这个步骤的目的:这步中我们会检测出整张图片中满足条件的所有直线,再通过筛选选出横的表格框线,再利用检测出的表格框线来提取两个框线之间的内容即为表格中的一行。

阅读全文 »

先来看看上次处理后的整张图片效果:

afterdilate

这里发现我将图片的颜色已经反相了,这是考虑到下一步的直接检测必须以白色像素为内容。做法在上一篇提到过,交换两段的位置就可以了。

可以看到噪点已经几乎没有了,文字的清晰度还是可以的。这里采用的kernel都是2x2的。

直线检测

下面就是比较关键步骤——直线检测了。

首先介绍一下openCV提供的直线检测算法:霍夫变换。

阅读全文 »

环境配置

https://www.learn2crack.com/2016/03/setup-opencv-sdk-android-studio.html

非常新的一篇在AS中安装OpenCV的教程,按教程装好了环境并测试通过。

注意教程中没有讲到的是想要使用OpenCV的相关功能,需要安装下载包中apk目录下的对应处理器的OpenCV manager。并在使用OpenCV的活动中加入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {

//Connect to OpenCV manager service and initialize
@Override
public void onManagerConnected(int status) {
switch (status){
case BaseLoaderCallback.SUCCESS:
Log.i(TAG, "OpenCV Success");
break;
default:
super.onManagerConnected(status);
Log.i(TAG, "OpenCV Fail");
break;
}

}
};
1
2
3
4
5
6
7
//Initialize at every resume
@Override
protected void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0, getApplicationContext(), mLoaderCallback);
Log.d(TAG, "On Resume OK");
}
阅读全文 »