图像检索服务器编写问题记录——特征库的存储问题

来源:互联网 发布:莫言获奖 知乎 编辑:程序博客网 时间:2024/04/29 08:17

【1】SIFT特征没有自己编写,使用了opencv的SIFT特征提取、匹配函数。

【2】centos6.8装opencv3.0有问题,系统更换成了ubuntu14.04.4。opencv3已将sift库去掉,需要自己在git上下载编译,但是编译出来错误很多,诸多不顺,最终换成了老版本。opencv2.4.9,系统ubuntu14.04.4,很顺利。

【3】opencv特征库的描述子提取出来是cv::Mat类型,对数据库完全不懂如何存储自定义类型,所以使用opencv自带的文件类将Mat写入XML中了。好在整个服务运行的过程中,只是对特征库中的数据进行逐个比对,所以将特征存储在数据库,XML的区别也只是一开始服务器开启时载入数据的速度快慢,并不影响数据查询速度。

【4】所有同类型工作线程都是提取待检测图片的特征描述子,并将该描述子与特征库中所有的描述子逐个比较。所以我把xml中的特征,在服务开启时,就全部载入进来了。做成了全局。

【5】特征库描述子们做成全局,该怎么弄?既不能在函数栈中分配(随着特征库的增加会不会爆栈?)也不想做成全局变量(全局静态区放这么大的数据量好吗?)。最后是使用全局的*const ptr=new FEA()。

const指针,这样指针指向不会发生改变了,可以放心的定义成全局了(大家都看的到,大家都改不了);

FEA(),只提供对特征描述子的值副本,这样特征库描述子大家都看的到,大家都改不了。

new,在堆中分配内存,不会爆栈,不用担心全局静态区放太多的东西。

0 0