我决定启动这项在心中停留了好几年的想法。
辅助性的输出应当是:熟悉opencv的开发以及图像检索的各种算法的优劣。熟悉Python。熟悉Object-C的开发。
目标先不要定太高,先从一个有限的标准图片库进行检索开始:
- 库里面有300~2000张长方形的彩色图片。
- 检索的图片源来自互联网或者相机。
- 待检索的图片中可能包含有长方形区域,匹配库中的某一图片(的主要区域,边缘部分有可能不一致,主要区域上可能被污损)。括号内的难度递增。
- 待检索图片主要区域可能有色偏。
- 待检索图片主要区域可能有沿曲面的变形。
- 待检索图片主要区域可能有轻微的平面几何变形。
- 检索结果可以包含一个小集合3~10个库内图片,并附带其匹配得分。
好了,说说编程和一些结果。
python好几年没用了,现在发现还是很方便的。
安装步骤:
- Download python installer.exe
- Install python(include pip)
- pip install –upgrade setuptools
- pip install numpy Matplotlib
- pip install opencv-python
- pip install时加上 -i https://pypi.tuna.tsinghua.edu.cn/simple,快很多,清华的源就是好
python编程基本靠search engine… 我是连注释方式都忘得差不多。
opencv编程也是,查cv版本:
python
>>import cv2
>>cv2.__version__
cv和cv2很多函数/常量也改名改得多,速查函数/常量名:
for option in cv2.__dict__:
if ‘KEYWORD’ in option:
print option
先来的是直方图,
计算直方图
cv2.calcHist,其中有个比较有效的参数是直方图分块,一般用256,但在存在色偏而不是太严重的时候,就不适宜用256了,目前根据这些图片的特点,改用4/5/6/7/8等会更好,当然了,根据需要用不同的分块数来计算直方图后再结合多个结果会更好。
直方图比较
cv2.compareHist,有好几种公式,我没想到对于色偏最好的是cv2.HISTCMP_INTERSECT,再结合3~10的直方图分块,效果比较理想。
目前所做的是全图片直方图比较。由于图片中央矩形的边沿存在很多不确定性,导致直方图在左右两端(近0和近255)差异较大,公式倾向于失效。必须进行图片的中央矩形提取。
下一步做中央矩形提取。