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.
Python3,OpenCV
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()
#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()
Wie in der folgenden Abbildung gezeigt, können Sie sehen, dass das Zielbild wiederholt angeordnet ist.
#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()
Sie können sehen, dass die Terminalpixel so verwendet werden, wie sie in der folgenden Abbildung dargestellt sind.
#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()
Wie in der folgenden Abbildung gezeigt, können Sie sehen, dass das Bild umgekehrt platziert ist.
#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()
Gleiche Reflexion wie BORDER_REFLECT, wiederholt jedoch keine Kantenpixel Die gleiche Verarbeitung wird ausgeführt, wenn BORDER_REFLECT_101 auf BORDER_DEFAULT gesetzt ist.
Recommended Posts