Motive Es gibt Stellen, an denen Sie Ihr Siegel auf eine Excel-Tabelle oder ein Excel-Wort stempeln können. Wenn es sich um ein kleines wichtiges Dokument handelt, möchte ich manchmal das gleiche Siegelzertifikat verwenden, das im Rathaus registriert ist. Zuvor habe ich das Papier jedoch einmal im Supermarkt gedruckt, abgestempelt, erneut gescannt und als PDF eingereicht. Hat gemacht.
Ich habe viel analog verarbeitet, aber ich dachte, wenn ich das Siegel abbilden und auf das Blatt kleben könnte, müsste ich nicht zum Supermarkt gehen.
Zuerst habe ich ein Bild des Siegels gemacht und versucht, die Hintergrundfarbe mit PowerPoint oder einem kostenlosen Bildbearbeitungswerkzeug transparent zu machen, aber ich habe aufgegeben, weil ich je nach Papierqualität nicht alles konvertieren konnte.
Also habe ich nach Versuch und Irrtum ein paar Zeilen Bildverarbeitung mit OpenCV geschrieben und das Problem gelöst, also werde ich es als Memorandum belassen.
Dataset Ich habe die Siegelprobe von [Axea] verwendet (https://www.accea.co.jp/hanko/pj_hanko.html).
Method
Development
import cv2
import sys
import numpy as np
if __name__ == '__main__':
if len(sys.argv) != 2:
sys.exit()
window_name = "sample"
img_path = sys.argv[1]
mat = cv2.imread(img_path)
gray = cv2.cvtColor(mat, cv2.COLOR_BGR2GRAY)
cv2.imwrite("gray.png ", gray)
#Binarisierung
ret2, mono = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY_INV)
cv2.imwrite("mono.png ", mono)
#Maskierungsprozess
dst = cv2.bitwise_and(mat,mat,mask=mono)
cv2.imwrite("dst.png ", dst)
#Kanal 3->Wechseln Sie zu 4
alpha = cv2.cvtColor(dst, cv2.COLOR_BGR2BGRA)
#Nur der schwarze Hintergrund ist transparent
for i,col in enumerate(dst):
for j,row in enumerate(col):
color = dst[i][j]
if (color == np.array([0,0,0])).all():
alpha[i][j][3] = 0
cv2.imshow(window_name, alpha)
cv2.imwrite("out.png ", alpha)
cv2.waitKey(0)
cv2.destroyWindow(window_name)
Dieses Mal werden auch die zur Hälfte verarbeiteten Bilddaten ausgegeben.
Result
Verarbeitungsablauf | output |
---|---|
Originale Daten | |
Schwarz und weiß | |
Binarisierung+Umkehren | |
Maskierung | |
Hintergrundfarbtransparenz (Verarbeitung beenden) |
Future
Hintergrundtransparenz kann einfach mit cv2.bitwise_and
erstellt werden.
Wenn es scheint, dass es einige Zeit dauern wird, das Tool zu verwenden, scheint dieses besser zu sein.
Reference
Recommended Posts