簡體   English   中英

如何在另一個圖像中找到一個圖像? Node.js的

[英]How to find one image inside of another? Node.js

我有2張bmp圖片。 ImageA是屏幕截圖(示例),ImageB是其子集。 例如說一個圖標。

我想在ImageA中找到ImageB的X,Y坐標(如果存在)。

知道我會怎么做嗎?

這稱為光學識別。 它可能看起來很復雜,但是實現起來可能非常簡單,所以請不要回避!

假設Image A是我們要尋找的圖像, Image B是其中包含Image A的較大圖像。

方法1

如果Image A的規模Image B沒有被改變,而且顏色都保留下來,您可以將Image B上的HTML 5的畫布和遍歷像素數據。 您將從Image A加載第一行像素,然后遍歷Image B每個像素。 如果像素相同,則可以將該像素列存儲在變量中,然后檢查下一個是否也匹配。 如果第一行完全匹配,則跳至下一行並進行比較。 您將重復此操作,直到找到匹配項或達到不匹配的(或足夠)像素為止。 在這種情況下,您將重置所有變量,然后重新開始查找與第1行匹配的內容。

方法2

如果Image AImage B不完全相同,則會出現新的復雜情況,並且事情會變得更加復雜。 如果只改變比例,我們可以對方法1進行一些調整,以得到可行的方法。 除了獲取任何像素並查看是否80%左右匹配之外,我們還需要跟蹤圖像的絕對/壓縮

在每一行中,逐步遍歷像素。 例如,我們將每十分之一像素檢查一次。 如果找到像素1的匹配項,則檢查距離像素10個像素,然后查看該像素是否存在於行中的任何位置 如果找到它,則從0到該像素的距離除以10(我們的增量)就是原始圖像的幾倍。

如果我們發現Image A的像素從0開始有20個時隙,而Image B像素僅相隔10個像素(請記住,我們的增量為10),那么我們的原始圖像要大2倍。 換句話說,新圖像是原始圖像大小的一半。

1) compression = target_width / original_width
2) compression = 20 / 10
3) compression = 2

這是一種檢測匹配的更為復雜但可靠的方法。 足夠的匹配行意味着您擁有匹配的圖像,但是垂直拉伸呢?

相似的邏輯。 如果找到匹配的行,則從0開始並向下移動10,然后在Image A找到該像素的匹配項。

編輯

我提供的方法是用於在任何其他圖像中查找任何圖像的通用方法。 您可以想象這是性能密集型的。 我不知道您要檢測什么圖像,但是如果有常見的形狀,有時您可以使用其他算法。 例如,如果您有一個圓形,則只需檢查是否有半徑 像素匹配半徑內的像素相同。

我介紹的方法也不能彌補翹曲 如果圖像被拉伸但保持矩形比例,則方法2應該很好。 例如,如果圖像變形為圓形,則情況將變得更加復雜。 對於這種情況,我唯一能給出的提示是檢查原始半徑內的像素是否匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM