Hallo. Dies ist der erste Beitrag. Ich habe ungefähr 20 Minuten gewartet, als ich neulich nach Saiseriya ging. Ein paar Leute haben nach Saiseriyas Fehlern gesucht und konnten sie nicht finden ... (zu viel ...) Also dachte ich, dass es durch Bildverarbeitung gelöst werden könnte, also habe ich es versucht. Es war auch eine gute Studie für OpenCV.
Von Saiseriya offiziell veröffentlichte Bilddaten unter Verwendung der OpenCV-Bibliothek (https://www.saizeriya.co.jp/entertainment/) Ich möchte die Suche nach Fehlern verarbeiten und automatisieren! !! !! Was Sie tatsächlich tun, ist
Es ist wie es ist. Ich habe den Code an [GitHub] weitergegeben (https://github.com/kurikinton105/SaizeriyaDifference).
macOS Mojave 10.14.4 Python 3.6.7 OpenCV 3.4.1
Wenn Sie es herunterladen, werden Sie feststellen, dass "die zu vergleichenden Bilder zusammenkleben" + "es gibt einen mysteriösen Rand".
Zunächst möchte ich die Ränder löschen. Der Fluss des Löschens von Leerzeichen ist
[https://qiita.com/trami/items/e25eb70a59a51ae4f7ba# Entfernen von Rändern](https://qiita.com/trami/items/e25eb70a59a51ae4f7ba#%E3%81%A9%E3%81 % AE% E3% 82% 88% E3% 81% 86% E3% 81% AB% E3% 81% 97% E3% 81% A6% E4% BD% 99% E7% 99% BD% E5% 89% 8A Wir verweisen auf den Artikel% E9% 99% A4% E3% 82% 92% E8% A1% 8C% E3% 81% 86% E3% 81% AE% E3% 81% 8B).
Die Graustufenfunktion in OpenCV
gray.py
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #Graustufen
Die Binärisierungsfunktion
binary.py
r, binary = cv2.threshold(gray, 0, 255,cv2.THRESH_OTSU) #Binarisierung
Die Funktion zum Zuschneiden von Bildern
cut_img.py
img = img[y1:y2,x1:x2] #(x1,y1)Von(x2,y2)Ausgeschnitten
Es ist wie es ist. Wenn Sie diese kombinieren, lautet der bisherige Code
saizeriya.py
import cv2
import numpy as np
img = cv2.imread('diff.png') #Bilder laden
height, width, d = img.shape #Höhe Breite Tiefe
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #Graustufen
r, binary = cv2.threshold(gray, 0, 255,cv2.THRESH_OTSU) #Binar bei Schwelle 200
contours = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[0]
#Konturen extrahieren, Ränder entfernen
x1 = [] #Minimalwert der x-Koordinate
y1 = [] #Minimalwert der y-Koordinate
x2 = [] #Maximalwert der x-Koordinate
y2 = [] #Maximalwert der y-Koordinate
for i in range(1, len(contours)):
ret = cv2.boundingRect(contours[i])
x1.append(ret[0])
y1.append(ret[1])
x2.append(ret[0] + ret[2])
y2.append(ret[1] + ret[3])
x1_min = min(x1)
y1_min = min(y1)
x2_max = max(x2)
y2_max = max(y2)
img = img[0:600, x1_min:x2_max] #Schneiden Sie den Rand ab
Das Ausführungsergebnis ist wie folgt. Sie können sehen, dass es gut geschnitten ist.
saizeriya.py
height, width,d= img.shape #Höhe Breite Tiefe(Die Größe des Ausschnitts)
midle = int(width/2)
img1 = img[0:height,0:midle-3]
img2 = img[0:height,midle-8:width-11] #Eigentlich ist die Breite etwas anders...
Was hier lächerlich war, war, dass die scharfen Kanten der beiden Bilder tatsächlich leicht unterschiedlich waren. Die Einstellung endete damit, dass das zu schneidende Teil manuell angepasst wurde.
Berechnen Sie als nächstes die Differenz zwischen den Bildern. Der Unterschied zwischen den Bildern kann durch Subtrahieren der Numpy-Arrays berechnet werden. Wenn Sie ihn jedoch tatsächlich ausführen, ist der Unterschied schwer zu verstehen (ein geringfügiger Unterschied in der Farbe und eine geringfügige Abweichung in der Position werden als Unterschied angezeigt). Diesmal also OpenCV Ich habe die ** absdiff ** Funktion von verwendet.
Die Funktion ** absdiff ** kann den absoluten Wert der Differenz zwischen zwei Bildern ermitteln.
saizeriya.py
#Unterschied zeigen
result = np.copy(img1) #Array zum Speichern des resultierenden Bildes
add = np.copy(img1) #Array zum Speichern des resultierenden Bildes
#result = img1-img2 #Berechnung der Differenz
result = cv2.absdiff(img1, img2) #Berechnung der Differenz(absdiff)
Ausführungsergebnis
Als Referenz ist es das Ergebnis, wenn es durch Subtrahieren der Arrays ausgeführt wird.
Daher weiß ich nicht, wo der Unterschied liegt, deshalb möchte ich ihn mit dem Originalbild kombinieren. Kombiniert das ursprüngliche graue Bild + Differenzbild (Farbe).
Die zu verwendende Funktion ist die Funktion ** add **. Verwenden Sie auch die Funktion ** cvtCOLOR **, um das ursprüngliche Farbbild zu konvertieren.
Prozess mit.
saizeriya.py
img3 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY) #Graustufen
img3 = cv2.cvtColor(img3,cv2.COLOR_GRAY2BGR) #Machen Sie ein Farbbild mit Graustufen
print(img3.shape)
print(result.shape)
add = cv2.add(img3,result) #Bilder kombinieren
#Bildschirm
cv2.imshow('all',img)
cv2.imshow('image',add)
cv2.imshow('result',result)
cv2.waitKey(0) #Warten Sie, bis eine Taste gedrückt wird
cv2.destroyAllWindows() #Zerstöre alle Fenster
Ausführungsergebnis
Jetzt können Sie sehen, was anders ist.
Bitte sag mir noch zwei ...
Es war nur ein Hilfsmittel.
Recommended Posts