Die Fortsetzung des Artikels, den ich zum ersten Mal seit einem Jahr geschrieben habe.
Ich habe das OpenCV-Dokument so geschrieben, wie es in Bildverarbeitung mit Python (1) für die Binärisierung mit OpenCV ist. Versuchen Sie statt "Binärisieren" etwas wie "Finden Sie den Schwellenwert für die Binärisierung und schneiden Sie die Pixel unterhalb dieses Schwellenwerts ab und zeigen Sie ihn an".
Verringern Sie das Lenna-Bild um 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)
In dem Bild, in dem th binärisiert ist, ist ret der Schwellenwert.
Wenn Sie einfach denken, können Sie dies anscheinend mit dem folgenden Code tun.
height, width = img.shape
for y in range(height):
for x in range(width):
if img[y, x] < ret:
img[y, x] = 0
Es gibt jedoch ein Problem mit diesem Code. Die Bewerbung für das Array von numpy ist sehr langsam.
Gibt es eine Möglichkeit, es schneller zu machen? Natürlich gibt es.
low_idx = img < ret
img[low_idx] = 0
Wenn Sie nun die Bilder vergleichen, sieht es so aus.
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()
Ich habe eine Schwelle für die Binarisierung gefunden und bei dieser Schwelle abgeschnitten.
Recommended Posts