花40分钟写一个-CBIR引擎-代码公开
2024-10-08 01:48:36
浏览网页的时候发现一篇不错的文章"用Python和OpenCV创建一个图片搜索引擎的完整指南"http://python.jobbole.com/80860/.作者在浏览自己旅游的照片的时候,发现照片太多了分类不过来,一时技痒写了个分类软件,虽然简单但是有用。关键的是我发现他在原文中使用了半个小时就写出来了。
蛮快的嘛,我想。那么我要用多长时间写出来了,毕竟对于CBIR也是研究过的。
那么立即来做,首先我要找到是图片。我没有那么多旅游图片(汗),但是别人的照片也是可以一样用的。找到了之前专门用于测试CBIR的图片集,大概是这个样子
就是各种奇奇怪怪的照片。然后搭建opencv的基本框架。我们python用的不熟,但是c++下面自己是有类库的,所以用起来也不是很复杂
首先是读入所有的图片:
;
){
);
_findclose(hFile);
}
}
;i);i){
pair<Mat,string> apir;
apir.first = tmp;
apir.second = fileNames[i];
files.push_back(apir);
}
}
}
){
);
_findclose(hFile);
}
}
;i);i){
pair<Mat,string> apir;
apir.first = tmp;
apir.second = fileNames[i];
files.push_back(apir);
}
}
}
然后是编写hsv距离,这个参考以前的资料
; ;
, };
, };
, };
, channels, Mat(), hist_base, , histSize, ranges, , , NORM_MINMAX, , Mat() );
calcHist( , channels, Mat(), hist_test1, , histSize, ranges, , , NORM_MINMAX, , Mat() );
);
return base_test1;
}
, };
, };
, };
, channels, Mat(), hist_base, , histSize, ranges, , , NORM_MINMAX, , Mat() );
calcHist( , channels, Mat(), hist_test1, , histSize, ranges, , , NORM_MINMAX, , Mat() );
);
return base_test1;
}
封装成函数。这个函数比原文中作者提出的方法要简单,我偷懒了。
然后就是要编写主函数程序,这个比较麻烦的地方就是要比较出最前面的10 个图片 。我采用比较笨的方法,赶时间嘛:
;
;
;i)
tmp ;];
sprintf_s(cbuf,;index;index;i];
sprintf_s(cbuf,;;
imax ;
}
printf(;
}
;
;i)
tmp ;];
sprintf_s(cbuf,;index;index;i];
sprintf_s(cbuf,;;
imax ;
}
printf(;
}
前后花了40-50分钟时间,最后的效果不如作者的效果。主要差距在核心算法上面。看来日常的算法总结重构的确很有价值。
这篇文章先写到这里,最近事多,等到闲下来再进行重构。欢迎大家批评指正。
最新文章
- maven 下载 源码和javadoc 命令
- 【linux】学习7
- TCP/IP基础知识
- 获取滚动条ScrollBar宽度
- Echarts - js
- 【JS】Intermediate3:AJAX
- c语言数组初始化问题
- 配置Tomcat出现Unsupported major.minor version 51.0
- MAC下pyenv和pyenv-virtualenv插件初探
- linux上搭建ftp
- 常用Linux操作命令
- hdu3081 Marriage Match II
- enable_shared_from_this类的作用和实现
- 八皇后问题(C#)
- Unit 3.标签的分类和嵌套规则
- 数据挖掘(二)——Knn算法的java实现
- angular的异步处理$q的使用(promise)
- 新手必看ES6基础
- Oracle根据表的大小排序SQL语句
- 【Mac】使用PicGIF制作gif动态图片