[PYTHON] Ich habe versucht, den auf Papier gestempelten Stempel mit OpenCV zu digitalisieren

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). ieyasu.jpg

Method

  1. Binarisierung + Bildinversion
  2. Maskierung mit Originalbild und 1 Bild
  3. Transparentes Hintergrundbild (α-Wert 100%)

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 ieyasu.jpg
Schwarz und weiß gray.png
Binarisierung+Umkehren mono.png
Maskierung dst.png
Hintergrundfarbtransparenz
(Verarbeitung beenden)
out.png

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

Ich habe versucht, den auf Papier gestempelten Stempel mit OpenCV zu digitalisieren
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren
Ich habe versucht, mit OpenCV Ann Man zu werden
Ich habe versucht, die Sprache mit CNN + Melspectogram zu identifizieren
Ich habe versucht, das Wissensdiagramm mit OpenKE zu ergänzen
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, die Anzeigenoptimierung mithilfe des Banditenalgorithmus zu simulieren
Ich habe versucht, mit "Syncthing" Dateien auf mehreren PCs zu synchronisieren
[TF] Ich habe versucht, das Lernergebnis mit Tensorboard zu visualisieren
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe versucht, den Ipython-Cluster unter AWS auf das Minimum zu starten
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren (Re-Challenge)
Ich habe versucht, das Zugriffsprotokoll mit Node.js auf dem Server auszugeben
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich habe versucht, das Bild mit OpenCV im "Skizzenstil" zu verarbeiten
Ich habe versucht, die COTOHA-API zu verwenden (es gibt auch Code auf GitHub).
Ich habe versucht, die Videowiedergabezeit anzuzeigen (OpenCV: Python-Version)
Ich habe versucht, einen Sender auf der IoT-Plattform "Rimotte" zu registrieren.
Ich habe am Wochenende versucht, mit Bitcoin Systre zu beginnen
Ich habe versucht, BigQuery-Daten mit Jupyter Lab mit GCP zu visualisieren
Ich habe versucht, das Bild mit OpenCV im "Bleistift-Zeichenstil" zu verarbeiten
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich habe versucht, den Befehl umask zusammenzufassen
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, Text mit TensorFlow zu klassifizieren
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, die COTOHA-API zu berühren
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Ich habe versucht, die BigQuery-Speicher-API zu verwenden
Ich habe versucht, das Gesichtsbild mit sparse_image_warp von TensorFlow Addons zu transformieren
[Python] Ich habe versucht, die Nacht der Galaxienbahn mit WordCloud zu visualisieren!
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Ich habe versucht, jpholidayp über Proxy zu verwenden, um cron nur an Wochentagen auszuführen
Ich habe versucht, die Ähnlichkeit der Frageabsicht mit Doc2Vec von gensim abzuschätzen
Ich möchte ein Bild auf Jupyter Notebook mit OpenCV (Mac) anzeigen.
Ich habe versucht, mehrere Servomotoren MG996R mit dem Servotreiber PCA9685 zu steuern.
Passende Karaoke-Tasten ~ Ich habe versucht, es auf Laravel zu setzen ~ <auf dem Weg>
Ich habe versucht, verschiedene Sätze mit der automatischen Zusammenfassungs-API "summpy" zusammenzufassen.
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Mit COTOHA habe ich versucht, den emotionalen Verlauf des Laufens von Meros zu verfolgen.
Ich habe versucht, die Neujahrskarte selbst mit Python zu analysieren
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe Web Scraping versucht, um die Texte zu analysieren.
Ich habe versucht, Remote API mit GAE / J zu verwenden
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Ich habe versucht, beim Trocknen der Wäsche zu optimieren
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, mit OpenCV Bewegungen schnell zu erkennen