大家已經(jīng)熟知了著名的TemplateMatching算法,可以實(shí)現(xiàn)在大圖中找小圖。現(xiàn)實(shí)使用中可能會苦惱TM算法強(qiáng)依賴于OpenCV的動(dòng)態(tài)鏈接庫,環(huán)境稍有問題就會運(yùn)行失敗,因此,有人會問了,有沒有純Java或者C#的方法來處理得到圖片檢索的功能呢?答案是肯定的。下面介紹一種純Java的方法:
首先,定義一張?jiān)磮D(此處叫小圖),再定義一張新截取的圖(此處叫大圖),然后還是原先介紹過的操作,必然第一步要將RGB值讀進(jìn)來。(圖像對比很大程度上是像素?cái)?shù)據(jù)的處理,記住這句話)
然后,就可以在大圖中找小圖了!找的方法如果是從源圖的左上角到右下角硬找的話,估計(jì)機(jī)器耗時(shí)會很久,不推薦這種方法;下面介紹一種稍微巧妙的方式,將小圖的四個(gè)角的像素對象留下,在大圖中按4個(gè)角的色值去檢索,當(dāng)然這個(gè)檢索的結(jié)果可能返回一個(gè)x,y也可能返回一堆的candidate。因此接下來,需要在發(fā)現(xiàn)圖中去進(jìn)行全面比對,廢話不多說,核心代碼如下:
總結(jié):此法比較適合在同一種分辨率為前提的圖形中進(jìn)行比較,小圖尺寸無縮放且同比例截取自源圖,稍有變化則不靈,但好處是精準(zhǔn)。靈活性不夠。為了提高靈活性則需要考慮在小圖全局比較的時(shí)候引入閾值的概念,譬如95%以上的相似度則認(rèn)為檢索成功等(此處稍改代碼即可實(shí)現(xiàn)),再往上提高則需要做分辨率的文章了,小編目前還沒有成型的Demo,留下作業(yè)以后找機(jī)會實(shí)現(xiàn)。