OpenCVの、numpyのとPythonを使用して画像内の画素を探索

ジョン・ポール :

私は(その後、細かい作品座標位置を使用して、特定の画素を読み取り、画像を読み取ることができましたpixel = img[801,600])。

私の次のステップは、各画素を反復し、ピクセルデータを使用して([801600]この例では)位置を見つけることを試みることです。

「IMG」を通して私の反復は、ピクセルを見つけることができません。私は任意のヘルプや指導をいただければ幸いです。

import cv2
import numpy as np

img = cv2.imread('one.jpg')

pixel = img[801,600]

print (pixel) # pixel value i am searching for

for i in img:
    for x in i:
        if x.sort == pixel.sort:
            print ("SUCCESS")
DBAT:

内蔵のenumerate反復機能がお手伝いします。それはあなたの場合には、ピクセルのインデックスを提供すること、反復インデックスを提供します:

import cv2
import numpy as np

img = cv2.imread('one.jpg')

pixel = img[801,600]
print (pixel) # pixel value i am searching for

def search_for():
    for iidx, i in enumerate(img):
        for xidx, x in enumerate(i):
            if (x == pixel).all():
                print (f"SUCCESS - [{iidx} {xidx}]")

if __name__ == "__main__":
    print("Search using for loops...")
    search_for()

ことで、ループはPythonで遅く、それが適切な大きさの画像上で実行するコードのための時間がかかるため、と述べました。代わりに、使用してnp.array彼らはこのタイプのアプリケーション用に最適化されているような方法が好ましいです。

import cv2
import numpy as np

img = cv2.imread('one.jpg')

pixel = img[801,600]
print (pixel) # pixel value i am searching for

def search_array():
    # create an image of just the pixel, having the same size of 
    pixel_tile = np.tile(pixel, (*img.shape[:2], 1))
    # absolute difference of the two images
    diff = np.sum(np.abs(img - pixel_tile), axis=2)
    # print indices
    print("\n".join([f"SUCCESS - {idx}" for idx in np.argwhere(diff == 0)]))


if __name__ == "__main__":
    print("Search using numpy methods...")
    search_array()

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=395689&siteId=1