Как обнаружить битый пиксель на черном экране в Python? - PullRequest
0 голосов
/ 21 апреля 2020

У кого-нибудь есть аккуратное решение для обнаружения двух битых пикселей на следующем изображении? Я попытался найти белый пиксель, просматривая все пиксели, чтобы увидеть, какой из них имеет сумму 255 + 255 + 255 на всех 3 каналах. Но это решение очень трудоемкое, для прикрепленного изображения почти 20 секунд. Любые идеи? Спасибо

Вот мой текущий код:

import cv2
from matplotlib import pyplot as plt
import numpy as np

imageName = "4cf2cafa5db54bfebbb67e9d99a65e5a_Black200_SN1000.png"

img = cv2.imread(imageName)


# calculate the sum of max RGB channels in each column of the image
sumMax = np.array([],dtype=np.int32)
for i in range(0,img.shape[1]):
    maxPixel = 0
    for m in range(0,img.shape[0]):
        totalPixel = 
np.int32(img[m,i,0])+np.int32(img[m,i,1])+np.int32(img[m,i,2])
        if totalPixel > maxPixel:
            maxPixel = totalPixel
    sumMax = np.append (sumMax,maxPixel)

plt.plot(sumMax)
plt.show()

enter image description here

1 Ответ

2 голосов
/ 21 апреля 2020

Использование numpy.argwhere (или numpy.where является опцией):

import numpy as np

img = np.zeros([50, 50, 3], dtype=np.uint8)

# white pixels
img[[20, 30], [20, 10], :] = 255
index = np.argwhere(img[..., :] == 255)

print(index)

результат:

[[20 20  0]
[20 20  1]
[20 20  2]
[30 10  0]
[30 10  1]
[30 10  2]]
...