[PYTHON] Ich habe die Optionen von copyMakeBorder von OpenCV überprüft

zunaechst

Beim Filtervorgang (Weichzeichnen, Filtern) in OpenCV wird das Bild verarbeitet (Unschärfe / Rauschentfernung), indem ein bestimmter Bereich definiert und die Summe der Bereiche genommen wird. Zu diesem Zeitpunkt wird die Fläche für den Bildrand erweitert und berechnet, aber ich habe untersucht, wie sie erweitert werden kann.

Betriebsumgebung

Python3,OpenCV

Mit einem konstanten Wert vergrößern (BORDER_CONSTANT)

Mit Schwarz verlängern (0, 0, 0)

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

black = [0x00, 0x00, 0x00]
dimgray = [0x69, 0x69, 0x69]
gray = [0x80, 0x80, 0x80]
darkgray = [0xa9, 0xa9, 0xa9]
silver = [0xc0, 0xc0, 0xc0]
lighgray  = [0xd3, 0xd3, 0xd3]
gainsboro = [0xdc, 0xdc, 0xdc]
whiteSmoke = [0xf5, 0xf5, 0xf5]
white = [0xFF, 0xFF, 0xFF]

img = np.array([
                [black, white, black, white, black]
                ,[white, dimgray, white, dimgray, white]
                ,[gray, white, gray, white, gray]
                ,[white, darkgray, white, darkgray, white]
                ,[silver, white, silver, white, silver]
                ,[white, lighgray, white, lighgray, white]
                ,[gainsboro, white, gainsboro, white, gainsboro]
                ,[white, whiteSmoke, white, whiteSmoke, white]
                ])
#Erweiterte Pixelanzahl
exPixelNum = 8

plt.subplot(121),plt.imshow(img),plt.imshow(img),plt.title('Original')
conBdImg = cv.copyMakeBorder(img, exPixelNum, exPixelNum, exPixelNum, exPixelNum, cv.BORDER_CONSTANT)
plt.subplot(122),plt.imshow(conBdImg),plt.title('BORDER_CONSTANT')
plt.show()
Screen Shot 2020-05-17 at 16.02.45.png

Mehrere Pixel auf der gegenüberliegenden Seite (BORDER_WRAP)

#Originalbild (zum Vergleich in schwarz erweitert)
orgImg = cv.copyMakeBorder(img, exPixelNum, exPixelNum, exPixelNum, exPixelNum, cv.BORDER_CONSTANT)
plt.subplot(121),plt.imshow(orgImg),plt.title('Original')
plt.xticks([]), plt.yticks([])

#Bild einwickeln
wrpBdImg = cv.copyMakeBorder(img, exPixelNum, exPixelNum, exPixelNum, exPixelNum, cv.BORDER_WRAP)
plt.subplot(122),plt.imshow(wrpBdImg),plt.title('BORDER_WRAP')
plt.xticks([]), plt.yticks([])
plt.show()
Screen Shot 2020-05-17 at 16.23.55.png

Wie in der folgenden Abbildung gezeigt, können Sie sehen, dass das Zielbild wiederholt angeordnet ist.

BorderWrapDiff.png

Kantenpixel kopieren (BORDER_REPLICATE)

#Bild replizieren
repBdImg = cv.copyMakeBorder(img, exPixelNum, exPixelNum, exPixelNum, exPixelNum, cv.BORDER_REPLICATE)
plt.subplot(122),plt.imshow(repBdImg),plt.title('BORDER_REPLICATE')
plt.xticks([]), plt.yticks([])
plt.show()
Screen Shot 2020-05-17 at 16.42.32.png

Sie können sehen, dass die Terminalpixel so verwendet werden, wie sie in der folgenden Abbildung dargestellt sind.

BorderReplace.png

Reflexion (BORDER_REFLECT)

#Bild replizieren
#Bild reflektieren
refBdImg = cv.copyMakeBorder(img, exPixelNum, exPixelNum, exPixelNum, exPixelNum, cv.BORDER_REFLECT)
plt.subplot(122),plt.imshow(refBdImg),plt.title('BORDER_REFLECT')
plt.xticks([]), plt.yticks([])
plt.show()
Screen Shot 2020-05-17 at 17.36.40.png

Wie in der folgenden Abbildung gezeigt, können Sie sehen, dass das Bild umgekehrt platziert ist.

BorderReflect.png

Reflexion (BORDER_REFLECT_101)

#Bild reflektieren (Kantenpixel werden nicht wiederholt)
# BORDER_Die gleiche Verarbeitung wird ausgeführt, wenn DEFAULT verwendet wird.
ref101BdImg = cv.copyMakeBorder(img, exPixelNum, exPixelNum, exPixelNum, exPixelNum, cv.BORDER_REFLECT_101)
plt.subplot(122),plt.imshow(ref101BdImg),plt.title('BORDER_REFLECT_101')
plt.xticks([]), plt.yticks([])
plt.show()
Screen Shot 2020-05-17 at 17.47.13.png

Gleiche Reflexion wie BORDER_REFLECT, wiederholt jedoch keine Kantenpixel Die gleiche Verarbeitung wird ausgeführt, wenn BORDER_REFLECT_101 auf BORDER_DEFAULT gesetzt ist.

BorderReflect101.png

Recommended Posts

Ich habe die Optionen von copyMakeBorder von OpenCV überprüft
Ich habe den Inhalt des Docker-Volumes überprüft
Ich habe die Liste der Tastenkombinationen von Jupyter überprüft
Ich habe die Sitzungsaufbewahrungsdauer von Django überprüft
Ich habe die Verarbeitungsgeschwindigkeit der numpy eindimensionalisierung überprüft
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe die Ausgabespezifikationen von Bidirectional LSTM von PyTorch überprüft
Ich habe mir die Versionen von Blender und Python angesehen
Ich habe das Standardbetriebssystem und die Shell der Docker-Maschine überprüft
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe den Mechanismus der Flaschenanmeldung untersucht!
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe den Betrag der Schenkungssteuer überprüft
Ich möchte die HTML-Version der OpenCV 3.1-Version "OpenCV-Python Tutorials" lesen
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Ich habe den Nutzungsstatus des Parkplatzes anhand von Satellitenbildern überprüft.
Ich habe das Bild der Science University auf Twitter mit Word2Vec überprüft.
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Die Ordnerstruktur von Flask ist zusammengefasst
Ich kannte die Grundlagen von Python nicht
Die Python-Projektvorlage, an die ich denke.
Ich habe die Anzahl der bundesweit geschlossenen und eröffneten Geschäfte von Corona überprüft
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
Ich habe in der Bibliothek nach der Verwendung der Gracenote-API gesucht
Überprüfen Sie den Betrieb von OpenCV3, das von Anaconda installiert wurde
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
Ich habe 'Beauty' mit OpenCV ausprobiert
Ich habe die Implementierung von range gelesen (Objects / rangeobject.c)
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Ich habe das tiefste Problem von Hiroshi Yuki gelöst.
Das Verhalten von signal () hängt von der Kompilierungsoption ab
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Probieren Sie Progate Free Edition [Python I]
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich habe einige der neuen Funktionen von Python 3.8 touched angesprochen
Ich möchte das Bild entlang der Kontur anstelle des Rechtecks zuschneiden [Python OpenCV]
Ich habe die Varianten von UKR gelesen und implementiert
Ich möchte das Erscheinungsbild von zabbix anpassen
Ich habe den im Qiita Adventskalender 2016 gelöschten Kalender überprüft
[Python + OpenCV] Malen Sie den transparenten Teil des Bildes weiß
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
[SLAYER] Ich habe versucht, die Stahlseele zu bestätigen, indem ich die Texte von Slash Metal [Word Cloud] visualisiert habe.
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
Ich möchte das Ausführungsergebnis von strace erfassen
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
Optischer Fluss, das von OpenCV aufgenommene dynamische Bild
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Ich verfolgte die Implementierung des Befehls du (erste Hälfte)
Ich verglich die Identität der Bilder nach Hu Moment
Vielleicht habe ich die Auswirkungen von Shell Shock auf CGI überschätzt
Ich möchte die Grundlagen von Bokeh vollständig verstehen
Die Leistung von PHP war besser als ich erwartet hatte
Ich habe das Argument class_weight von Chainers Funktion softmax_cross_entropy untersucht.
Ich habe die Leistung von 1 Million Dokumenten mit mongoDB gemessen
Ich verfolgte die Implementierung des Befehls du (zweite Hälfte)
Ich habe versucht, die API von Sakenowa Data Project zu verwenden