孔雀开发小屋

专注并致力于手机客户端开发
<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

  • 随笔 - 103
  • 文章 - 0
  • 评论 - 251
  • 引用 - 0

常用链接

留言簿(38)

随笔分类

随笔档案

关注的博客

朋友的博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜

google c++风格指南笔记(五):格式

     摘要: 代码风格和格式确实比较随意, 但一个项目中所有人遵循同一风格是非常容易的. 个体未必同意下述每一处格式规则, 但整个项目服从统一的编程风格是很重要的, 只有这样才能让所有人能很轻松的阅读和理解代码.  阅读全文

posted @ 2011-06-28 15:22 孔雀 阅读(2363) | 评论 (1)编辑 收藏
关于全景图像的拼接

这段时间一直在做全景图像拼接,略有小成。总结一下:

图像拼接概括起来说,分两大步骤。第一步,配准。第二步,融合。

配准有基于模板匹配的,有基于特征点匹配的。现在的主流是基于特征点匹配的,SIFT是热点。

融合的方法有很多,有最简单的线性过渡,有经典的拉普拉斯金字塔融合(多波段融合),有基于小波变换的融合,还有比较新而且效果很赞的泊松图像编辑融合,可惜泊松图像编辑的这个方法我还没有实现出来,只是实现了基于拉普拉斯金字塔的融合,效果挺不错。

以下三篇论文是权威和经典,如果有能力消化并实现,那么一个完整的全景拼接系统就有了。
1) Construction of panoramic mosaics with global and local alignment.
   Heung-Yeung Shum and Richard Szeliski. 2000.
2) Eliminating Ghosting and Exposure Artifacts in Image Mosaics.
   Matthew Uyttendaele, Ashley Eden and Richard Szeliski. 2001.
3) Automatic Panoramic Image Stitching using Invariant Features.
   Matthew Brown and David G. Lowe. 2007.

ps: 上面论文作者其中的Richard Szeliski是计算机视觉界的翘楚,在微软研究院工作,最近出了新书《Computer Vision: Algorithm and Applications》英文版,200多美刀。不过该大牛在他的个人网站上放了书稿,pdf格式,绝对值得下载。

posted @ 2011-06-23 17:13 孔雀 阅读(5543) | 评论 (9)编辑 收藏
六年前

在微博上看的:

六年前,我会好多古诗词,提笔不忘字还会辨认错别字,给个作文题五分钟内就能动笔,会三角函数解析几何立体几何,懂英语语法,看得懂电路知道磁场电场动量动能洛伦兹力,分得清强酸弱酸共轭酸碱对,最爱实验题……现在 现在我TM就是个文盲。

18岁那年,我们都是全才,我们会微积分、线性规划、三角函数,会背《出师表》、《滕王阁序》,会分析虚拟语气的N种用法,会看电路图,会配方程式,会算遗传概率。现在呢,你还会什么?

高考结束了,马上又将会有这么一群孩子,迫不及待的扔下书包,去聚餐,通宵上网,旅行,KTV,闲逛,狂欢……认为自己终于解放了……殊不知的,你们离开的,就是天堂.


说的多好啊,感慨一个!

posted @ 2011-06-21 14:14 孔雀 阅读(537) | 评论 (0)编辑 收藏
【转】一些开发工具包

     摘要: 下面是收集的一些开发工具包,主要是C/C++方面的,涉及图形、图像、游戏、人工智能等各个方面,感觉是一个比较全的资源。供参考!原文的出处:http://www.codemonsters.de/home/content.php?show=freelibraries Contents 2D Graphics3D Graphics3D Game EnginesArtificial Intelligenc...  阅读全文

posted @ 2011-06-11 17:28 孔雀 阅读(1761) | 评论 (0)编辑 收藏
Windows平台上编译OpenCV的Android版本

1. 必备组件

1. svn

2. cmake (http://www.cmake.org)

3. Android NDK(r5b或更高版本)

4. OpenCV trunk (https://code.ros.org/svn/opencv/trunk/opencv)

2. windows上构建

opencv\android\scripts\目录下,新建wincfg.cmd文件。设置如下变量:

l         ANDROID_NDK

l         CMAKE_EXE

l         MAKE_EXE

关于wincfg.cmd文件的配置,可以参考opencv\android\scripts\wincmd.cfg.tmpl文件。

 

做完上述操作。即可打开命令行窗口。执行如下命令

cd opencv\android\scripts

cmake_android.cmd

 

编译完成即可在opencv\android\build目录下得到所有的静态库文件。

 

进入android-opencv目录执行cmake_android.cmd

执行完上步操作之后,就会得到一个标准的android工程。在该目录下的libs文件夹下会生成libandroid-opencv.so文件。

 

至此,有了android-opencv.so和各个模块的静态库。

 

将相应的头文件都拷贝一个统一的目录中,配合上述编译出来的静态库和动态库,就可以在android中使用opencv了。

posted @ 2011-06-11 17:20 孔雀 阅读(7213) | 评论 (5)编辑 收藏
数字图像处理:Sobel算子

Sobel算子主要用来做图像边缘检测。在OpenCV中有现成的接口可以调用,即:cvSobel。

今天遇到一个问题是需要一个类似Sobel算子的功能,因为Sobel算子没有考虑到像素点周围的相似性,现在需要考虑这个问题。所以需要的算子的元素与Sobel算子不同。于是自己动手写了sobel算子的实现,这样对于不同的参数修改算子的元素值即可。代码如下:

 1 void MySobel(IplImage* gray, IplImage* gradient)
 2 {
 3     /* Sobel template
 4     a00 a01 a02
 5     a10 a11 a12
 6     a20 a21 a22
 7     */
 8 
 9     unsigned char a00, a01, a02, a20, a21, a22;
10    unsigned char a10, a11, a12;
11 
12     for (int i=1; i<gray->height-1++i)
13     {
14         for (int j=1; j<gray->width-1++j)
15         {
16             CvScalar color = cvGet2D(gray, i, j);
17             
18             a00 = cvGet2D(gray, i-1, j-1).val[0];
19             a01 = cvGet2D(gray, i-1, j).val[0];
20             a02 = cvGet2D(gray, i-1, j+1).val[0];
21 
22             a10 = cvGet2D(gray, i, j-1).val[0];
23             a11 = cvGet2D(gray, i, j).val[0];
24             a12 = cvGet2D(gray, i, j+1).val[0];
25 
26             a20 = cvGet2D(gray, i+1, j-1).val[0];
27             a21 = cvGet2D(gray, i+1, j).val[0];
28             a22 = cvGet2D(gray, i+1, j+1).val[0];
29             
30             // x方向上的近似导数
31             double ux = a20 * (1+ a21 * (2+ a22 * (1
32                 + (a00 * (-1+ a01 * (-2+ a02 * (-1));
33 
34             // y方向上的近似导数
35             double uy = a02 * (1+ a12 * (2+ a22 * (1)
36                 + a00 * (-1+ a10 * (-2+ a20 * (-1);
37 
38             color.val[0= ux;
39 
40             cvSet2D(gradient, i, j, color);
41         }
42     }
43 }

上面代码中访问图像的像素使用了OpenCV的接口,这个不如直接使用指针的效率高,可以修改。

posted @ 2011-05-28 21:32 孔雀 阅读(3581) | 评论 (0)编辑 收藏
OpenCV中二维点求取进行透视变换之后的坐标点方法

我使用的是OpenCV 2.2版本。得到了一个透视矩阵,想把屏幕上的一个二维点经过这个透视矩阵进行变换,本身很简单的一个事情,却颇费了一番周折。原因是刚接触OpenCV,而且使用了OpenCV新添加的C++部分的矩阵类Mat,使用起来还真有点不顺手,因为OpenCV中没有向量的说法。一个矩阵变换一个向量就让我找了半天。

最终得以解决,还是使用了CvMat类而不是Mat类。代码如下:

1 CvPoint transformPoint(const CvPoint pointToTransform, const CvMat* matrix) 
2 {
3     double coordinates[3= {pointToTransform.x, pointToTransform.y, 1};
4     CvMat originVector = cvMat(31, CV_64F, coordinates);
5     CvMat transformedVector = cvMat(31, CV_64F, coordinates);
6     cvMatMul(matrix, &originVector, &transformedVector);
7     CvPoint outputPoint = cvPoint((int)(cvmGet(&transformedVector, 00/ cvmGet(&transformedVector, 20)), (int)(cvmGet(&transformedVector, 10/ cvmGet(&transformedVector, 20)));
8     return outputPoint;
9 }

这个函数一个很有用的地方就在于,原本二维图上的一个像素点位于(x,y)处,经过一个变换(仿射变换、透视变换)之后,求取它的新的坐标点(x', y')。

posted @ 2011-05-24 10:46 孔雀 阅读(5713) | 评论 (0)编辑 收藏
Ubuntu下编译Box2D物理引擎

平台是Ubuntu 10.04,Box2D版本为v2.1.2,Box2D采用cmake作为其编译系统。

按照Building.txt的步骤如下:($BOX2DPATH为box2d源码所在路径)
cd $BOX2DPATH/Build
cmake -DBOX2D_INSTALL=ON -DBOX2D_BUILD_SHARED=ON ..
make
make install
也可以在调用cmake时增加-DCMAKE_INSTALL_PREFIX=/opt/Box2D来自定义安装位置。

在make的过程中出现两个小问题
1) error: X11/extensions/XInput.h: No such file or directory
解决办法:
sudo apt-get install libxi-dev

2) 大量的OpenGL调用的引用没找到,这是因为没有链接Open GL的相关库,GL和GLU。
解决办法:
进入Build/Testbed/CMakeFiles/Testbed.dir/link.txt,在文件的指定链接Open GL的库所在的路径以及Open GL的库。在我的机器上,我增加了如下内容:
-L/usr/lib/mesa -lGL -lGLU

至此,问题解决,Box2D编译通过,Testbed可以运行了, enjoy it。

posted @ 2011-04-17 22:50 孔雀 阅读(2523) | 评论 (1)编辑 收藏
Android开发小结(一)


1. 切换屏幕导致Activity的onCreate调用两次。
解决办法:
    AndroidManifest.xml文件中添加:android:label="@string/app_name" android:configChanges="keyboardHidden|orientation"

2. 使用DisplayMetrics获取屏幕分辨率不正确。480x800的分辨率得到的结果却是320x533。
解决办法:
    和android sdk版本有关,1.6以上版本没有这个问题。AndroidManifest.xml文件中添加:<uses-sdk android:minSdkVersion="4"即可。


posted @ 2011-04-11 23:07 孔雀 阅读(1628) | 评论 (0)编辑 收藏
自己动手写makefile的一些注意事项

编译几个简单的cpp文件。自己写了makefile。编译器使用g++,链接器指定ld。

链接器指定使用ld会出现如下错误:
cannot find entry symbol _start
这是因为ld的真正入口是_start而不是main。需要链接相应的c库和c运行时库。libc、libcrt等。

解决办法是使用gcc。

但是链接器指定使用gcc会出现如下错误:
undefined reference to '__gxx_personality_v0'

这是因为缺少stdc++库,加上-lstdc++即可。
或者更干脆的使用g++,让g++去处理这些细枝末节吧。

posted @ 2011-04-09 14:35 孔雀 阅读(1874) | 评论 (2)编辑 收藏
仅列出标题
共11页: 1 2 3 4 5 6 7 8 9 Last