2017-10-05 3 views
0

Je calcule l'histogramme d'une image en niveaux de gris et je souhaite convertir la plage de pixels en niveaux de gris en noir. J'utilise le code suivant pour récupérer le histogram.`Convertir toute la valeur des pixels en niveaux de gris en noir

image = cv2.imread('./images/test/image_5352.jpg') 
cv2.imshow("image", image) 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
cv2.imshow("gray", gray) 

hist = cv2.calcHist([gray], [0], None, [256], [0, 256]) 
plt.figure() 
plt.title("Grayscale Histogram") 
plt.xlabel("Bins") 
plt.ylabel("# of Pixels") 
plt.plot(hist) 
plt.xlim([0, 256]) 
key = cv2.waitKey(0) 
cv2.destroyAllWindows() 

Histogram of the image

Par exemple, je veux convertir tous les pixels avec une valeur de 50 à noir.

+0

cela est assez sûr de ce que vous voulez, si elle est, ne hésitez pas à répondre à cette question avec les spécificités http: //answers.opencv .org/question/97416/replace-a-range-of-colours-with-a-specific-color-in-python/ – GPPK

+0

Je crois qu'opencv renvoie des tableaux chiffrés pour les images. Vous pouvez utiliser l'indexation booléenne pour manipuler l'image: 'gray [gray == 50] = 0' devrait fonctionner. – umutto

+0

Qu'en est-il des pixels de 49? Et 51? –

Répondre

0

Peut-être que l'image est seuillage ce que vous êtes après ...

Si la valeur de pixel est supérieure à une valeur de seuil, il est attribué une valeur (peut être blanc), sinon il se voit attribuer une autre valeur (peut être noir).

cv2.threshold(img,127,255,cv2.THRESH_BINARY)

Le code ci-dessus est en C++, mais assez facile à convertir. Le premier paramètre est l'image en question, le second est la valeur de seuil, le troisième est à quoi attribuer des valeurs de pixel s'il dépasse le seuil, et le quatrième est le type de seuillage dans lequel il y a plusieurs:

enter image description here

Pour en savoir plus: see here

+0

Merci pour la réponse, mais je ne veux pas changer tous les pixels en noir et blanc veulent juste changer certains pixels dans une certaine plage –

+0

Ah d'accord, je me trompe alors. Ne pourriez-vous pas simplement utiliser la radiodiffusion? https://docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html – Sam