? ? ? ? 支付寶紅包,發(fā)紅包的同學(xué)拍一張物體的照片,系統(tǒng)加黑線處理. 收紅包的同學(xué)在地圖上找到這個物體,同樣攝像頭以同樣的角度,距離對著掃,就可以領(lǐng)到紅包.

? ? ? ?這種玩法很有趣,調(diào)動了大家的積極性。我覺得這個玩法應(yīng)該首先在百度地圖上實現(xiàn),只可惜老東家的產(chǎn)品經(jīng)理們沒有想到類似的玩法.
? ? ? ? 下面說一下破解的對策,由于支付寶后臺匹配算法計算的也是相似度,因此并不是一定要找到藏紅包的地址,只需要從線索圖片里進(jìn)行處理,就可能通過驗證,拿到紅包。
? ? ? ?網(wǎng)上有photoshop教程,用黑線相近的區(qū)域填充黑線覆蓋的區(qū)域,就可以通過驗證。同樣,可以用python等腳本來實現(xiàn)。
? ? ? ?一個簡單的思路就是設(shè)置好固定的黑線和實景的像素寬度,用PIL去處理,進(jìn)行復(fù)制和粘貼工作..網(wǎng)上有很多類似的實現(xiàn).但是缺點也明顯,不同手機像素不同,需要自己去調(diào)節(jié),并且,阿里修改了黑線寬度策略,隨機化寬度,讓這種方式的工具丟掉了太多實景像素,而不能通過驗證。
? ? ? ?更好的解決方案是,通過選取幾列像素,通過像素值來動態(tài)計算判斷黑線的位置,然后通過黑線相近的像素用插值的方法去填充,這樣能損失最少的實景像素,并且處理之后的圖片看起來更柔和。
? ? ? ? https://github.com/whiled0ne 上,我已經(jīng)寫了一個demo,經(jīng)測試,可以領(lǐng)到不少紅包

.

? ? ? 盡管在某些類型的圖片上,這種方法近乎“完美”,但是在更多情況下,這種方式有很多弊端,它依賴你對黑線像素的閥值設(shè)置。如果背景顏色變化比較多,你需要自己調(diào)節(jié)這個黑線的閥值。
? ? ? 一個更好的黑線判斷思路是,將圖像的rgb做一條曲線,黑線的中心位置應(yīng)該落在曲線的奇點上,利用相鄰像素值的差來檢測,可以解決實景像素跟黑線接近的場景。首先,我們把每行像素的r g b相加,作出曲線

? ? 可以看到,圖片不同,像素不同,但是都在12的整數(shù)倍這里,達(dá)到最低點. 這里就是黑線的最低值. 而這個點可以通過每行像素跟前一行的增值來判斷,這個d小于0,說明曲線遞減,當(dāng)0第一次由小于零變?yōu)榇笥?,就可以判斷黑點的位置了
? ? ?另外一個工作就是判斷黑線的寬度,這也可以通過d的值輔助判斷,另外黑線還有一個明顯的特征,我們?nèi)∶啃邢袼氐淖畲笾岛妥钚≈?,黑線范圍內(nèi)的兩個數(shù)的比值應(yīng)該接近,用 log(e,max/min) 計算得到的數(shù)值接近0,這個特征算是必要不充分條件,結(jié)合一些其它特征,就可以不考慮像素點的具體值,具體范圍,就可以修復(fù)圖片.

? ?目前成功率在百分之五十左右,根據(jù)具體圖片不同,會有一些不同。
