毕论要在手机端利用sift算法提取图像特征值,而Lowa给出的sift是基于opencv库的,所以原来的思路是根据sift算法原理在手机上用symbian c++再实现一遍,这涉及到图像积分、求导,构建高斯金字塔,求梯度极值等一系列复杂计算,nokia官方给出了nokiacv的图像处理库,封装了图像转换、拉普拉斯算子卷积等函数,但毕竟功能有限,除此之外的函数都需自己实现,觉得有些郁郁
随后找到了symbian上调用的openc库,此时突然想到如果能把opencv库直接移植到symbian平台下,这将给我带来巨大的方便,带着这个冲动进行了实验,激动的是竟然成功了,步骤如下:
1.安装实验环境包括---opencv库、symbian sdk、jre、active perl、carbide c++
2.将opencv安装目录下 /OpenCV/lib下所有lib拷贝到 symbian sdk安装目录 /Symbian/9.2/S60_3rd_FP1_2/Epoc32/release/winscw/udeb 下
3.在carbide c++下新建openc console application,在mmp下导入cv.lib,cvaux.lib,cvcam.lib,cvcore.lib,cxts.lib,highgui.lib
然后拷贝opencv目录下头文件cv.h,cv.hpp,cvaux.h,cvcompat.h,cvtypes.h,cvver.h,cxcore.h,cxerror.h,cxmisc.h,cxtypes.h,highgui.h,util.h等拷贝到项目的inc目录下
4.然后就可以使用opencv库了,下面是简单demo将图像转为8位灰度图像
#include <stdio.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
// This is a GCCE toolchain workaround needed when compiling with GCCE
// and using main() entry point
#ifdef __GCCE__
#include <staticlibinit_gcce.h>
#endif
int main(void)
{
IplImage* img = cvLoadImage("C://test.bmp",1);
IplImage* init_img;
IplImage* gray8 = cvCreateImage(cvGetSize(img),8,1);
IplImage* gray32 = cvCreateImage(cvGetSize(img),32,1);
if(img->nChannels==1)
gray8 = (IplImage*)cvClone(img);
else
cvCvtColor(img,gray8,7);
cvConvertScale(gray8,gray32,1.0/255.0,0);
cvSaveImage("C://rr.bmp",gray8);
return 0;
}