自学opencv也有十几天了,一直练习教程上面的例子总感觉不够,刚好碰到一个老师出的数学建模题涉及图片处理兴趣立马上来,决定利用所学的解决这个建模题

下面是数学建模题:

最强大脑

  近期,江苏卫视正在热播节目“最强大脑”。节目中问题的难度、新异、选手的超强记忆力及敏锐的观察力让人叹服不已。

      曾经有这样一期节目,选手先观察近百幅人类历史上出现过的知名建筑图片(沙画,每幅大约1平米),然后由考官随机地从图片中选取一幅4cmX4cm,2cmX2cm等规格的截图,再让选手只观察截图判别截图出自于哪一幅沙画。节目中选手几乎是以不可想象的速度做出了正确的选择。

        看完节目,在选手的超强能力的佩服之余,觉得考官的选择还不够好,应该选择这些图片中相似性最大的部分,而不能选择那些有显著特点的截图,那么题目的难度更会显著增加。

        首先的问题是如何选择出那些相似性比较高的截图呢?请建立模型讨论这个问题,并岁附件中的图片选择出40X40像素及20X20像素的相似性最高的截图(截图仅限出现在附件图片中的矩形框内,空白截图除外)。

        其次,建立模型解决对于给定的截图(见附件中文件“截图.bmp”)出自于第几幅图片的何处位置的问题。

        看了题目和附件之后,首先想到的是要把图片的有效区域切出来,这时候就用上opencv了(python代码见附件split.py)

        首先将图片的有效区域找到, 再切取就ok啦。因为有效区域在所给的图片的矩形框内,所以就容易定位了。

        把图片有效区域切出来之后发现图片大小并非400X400, 而是435X342,想要切出40X40的图片就有点尴尬了,索性就想了一下大概的步骤(把图片切出来,然后用KNN算法进行聚类),然后开始做下一个问题。(切出来的图片在附件splitPicture文件中)

       寻找截图属于那张原图,只需要将截图与原图相应大小区域的像素值进行比较,相同即可。(python代码见附件find.py)

       不好意思,写到最后才发现无法添加附件,所以就把附件上传到文件类(附件名:python利用opencv切图.zip)中。