La suite de l'article que j'ai écrit plus tôt pour la première fois en un an.
J'ai écrit le document OpenCV tel qu'il est dans Traitement d'image avec Python (1) pour la binarisation en utilisant OpenCV. Au lieu de "binariser", essayez quelque chose comme "trouver le seuil de binarisation et couper les pixels en dessous de ce seuil et l'afficher".
Diminuez l'image de la lenna de 2.
import cv2
lenna = "4.2.04.tiff"
orig = cv2.imread(lenna, 0)
img = cv2.medianBlur(orig, 5)
ret,th = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
Dans l'image où th est binarisé, ret est le seuil.
Si vous pensez simplement, il semble que vous puissiez le faire avec le code suivant.
height, width = img.shape
for y in range(height):
for x in range(width):
if img[y, x] < ret:
img[y, x] = 0
Cependant, il y a un problème avec ce code. Faire une demande pour le tableau de numpy est vraiment lent.
Alors, y a-t-il un moyen de le rendre plus rapide? Bien sûr, il y en a.
low_idx = img < ret
img[low_idx] = 0
Maintenant, lorsque vous comparez les images, cela ressemble à ceci.
from matplotlib import pyplot as plt
plt.subplot(1,3,1)
plt.imshow(orig, cmap='gray'), plt.title('Original')
plt.subplot(1,3,2)
plt.imshow(img, cmap='gray'), plt.title('Threshold')
plt.subplot(1,3,3)
plt.imshow(th, cmap='gray'), plt.title('Binarize')
plt.show()
J'ai trouvé un seuil pour la binarisation et coupé à ce seuil.
Recommended Posts