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.
Python3,OpenCV
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()
#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()
Comme le montre la figure ci-dessous, vous pouvez voir que l'image cible est disposée à plusieurs reprises.
#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()
Vous pouvez voir que les pixels terminaux sont utilisés tels quels, comme illustré dans la figure ci-dessous.
#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()
Comme le montre la figure ci-dessous, vous pouvez voir que l'image est placée à l'envers.
#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()
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.
Recommended Posts