[PYTHON] J'ai vérifié les options de copyMakeBorder d'OpenCV

en premier

Dans le processus de filtrage (Flou, Filtre) dans OpenCV, l'image est traitée (flou / suppression du bruit) en définissant une zone spécifique et en prenant la somme des zones. À ce stade, la zone est agrandie et calculée pour le bord de l'image, mais j'ai étudié comment l'agrandir.

Environnement d'exploitation

Python3,OpenCV

Agrandir avec une valeur constante (BORDER_CONSTANT)

Prolonger avec du noir (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]
                ])
#Nombre de pixels étendu
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

Plusieurs pixels du côté opposé (BORDER_WRAP)

#Image originale (étendue en noir pour comparaison)
orgImg = cv.copyMakeBorder(img, exPixelNum, exPixelNum, exPixelNum, exPixelNum, cv.BORDER_CONSTANT)
plt.subplot(121),plt.imshow(orgImg),plt.title('Original')
plt.xticks([]), plt.yticks([])

#Envelopper l'image
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

Comme le montre la figure ci-dessous, vous pouvez voir que l'image cible est disposée à plusieurs reprises.

BorderWrapDiff.png

Copier les pixels de bord (BORDER_REPLICATE)

#Répliquer l'image
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

Vous pouvez voir que les pixels terminaux sont utilisés tels quels, comme illustré dans la figure ci-dessous.

BorderReplace.png

Réflexion (BORDER_REFLECT)

#Répliquer l'image
#Refléter l'image
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

Comme le montre la figure ci-dessous, vous pouvez voir que l'image est placée à l'envers.

BorderReflect.png

Réflexion (BORDER_REFLECT_101)

#Refléter l'image (ne répète pas les pixels de bord)
# BORDER_Le même traitement est effectué lorsque DEFAULT est utilisé.
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

Même réflexion que BORDER_REFLECT, mais ne répète pas les pixels de bord Le même traitement est effectué lorsque BORDER_REFLECT_101 est défini sur BORDER_DEFAULT.

BorderReflect101.png

Recommended Posts

J'ai vérifié les options de copyMakeBorder d'OpenCV
J'ai vérifié le contenu du volume du docker
J'ai vérifié la liste des touches de raccourci de Jupyter
J'ai vérifié la période de rétention de session de django
J'ai vérifié la vitesse de traitement de la numpy unidimensionnelle
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai vérifié les spécifications de sortie du LSTM bidirectionnel de PyTorch
J'ai vérifié les versions de Blender et Python
J'ai vérifié le système d'exploitation et le shell par défaut de docker-machine
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai étudié le mécanisme de connexion flask!
J'ai essayé d'utiliser GrabCut d'OpenCV
J'ai vérifié le montant de la taxe sur les cadeaux
Je veux lire la version html de la version "OpenCV-Python Tutorials" OpenCV 3.1
Je veux vérifier la position de mon visage avec OpenCV!
J'ai vérifié l'état d'utilisation du parking à partir d'images satellite.
J'ai vérifié l'image de l'Université des sciences sur Twitter avec Word2Vec.
J'ai essayé le serveur asynchrone de Django 3.0
La structure des dossiers de Flask est résumée
Je ne connaissais pas les bases de Python
Le modèle de projet Python auquel je pense.
J'ai vérifié le nombre de magasins fermés et ouverts dans tout le pays par Corona
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé la fonction de tableau croisé dynamique des pandas
J'ai recherché dans la bibliothèque l'utilisation de l'API Gracenote
Vérifiez le fonctionnement d'OpenCV3 installé par Anaconda
J'ai essayé l'analyse par grappes de la carte météo
J'ai essayé 'Beauté' avec OpenCV
J'ai lu l'implémentation de range (Objects / rangeobject.c)
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai résolu le problème le plus profond d'Hiroshi Yuki.
Le comportement de signal () dépend de l'option de compilation
J'ai essayé de corriger la forme trapézoïdale de l'image
Essayez Progate Free Edition [Python I]
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai touché certaines des nouvelles fonctionnalités de Python 3.8 ①
Je veux recadrer l'image le long du contour au lieu du rectangle [python OpenCV]
J'ai lu et implémenté les variantes de UKR
Je souhaite personnaliser l'apparence de zabbix
J'ai vérifié le calendrier supprimé dans le calendrier de l'Avent Qiita 2016
[Python + OpenCV] Peignez la partie transparente de l'image en blanc
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
[SLAYER] J'ai essayé de confirmer l'âme d'acier en visualisant les paroles de slash metal [Word Cloud]
J'ai essayé d'extraire des fonctionnalités avec SIFT d'OpenCV
Je veux grep le résultat de l'exécution de strace
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé le tutoriel MNIST de tensorflow pour les débutants.
Optical Flow, l'image dynamique capturée par OpenCV
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
J'ai suivi la mise en place de la commande du (première moitié)
J'ai comparé l'identité des images par moment Hu
Peut-être ai-je surestimé l'impact de Shell Shock sur CGI
Je veux bien comprendre les bases de Bokeh
Les performances de PHP étaient meilleures que ce à quoi je m'attendais
J'ai examiné l'argument class_weight de la fonction softmax_cross_entropy de Chainer.
J'ai mesuré les performances d'un million de documents avec mongoDB
J'ai suivi la mise en place de la commande du (seconde moitié)
J'ai essayé d'utiliser l'API de Sakenowa Data Project