We weten dat OpenCV veel wordt gebruikt voor het werken met afbeeldingen en hiervoor een breed scala aan functies heeft. Maar wat als we afbeeldingsbestanden willen verwerken zonder een externe bibliotheek zoals OpenCV te gebruiken. Laten we eens kijken hoe we dat kunnen doen.
Beeldschaling (met behulp van naaste buur-interpolatie):
Nearest-buur-interpolatie — dit is de gemakkelijkste manier om te interpoleren. Deze methode bepaalt eenvoudig de "dichtstbijzijnde" aangrenzende pixel en neemt een waarde voor de intensiteit ervan.
Beschouw een kleine afbeelding waarvan de breedte w en de hoogte — h dat we willen veranderen van breedte p naar breedte q, ervan uitgaande dat p > m en q > N. Nu hebben we twee schaalconstanten nodig:
scale_x = p / w scale_y = q / h
Nu herhalen we eenvoudig alle pixels in het uitvoerbeeld, verwijzend naar de originele pixels die we van kopiëren. onze controlevariabelen schalen met scale_x en scale_y, en de resulterende geschaalde indexwaarden afronden.
Visuele weergave:
De afbeelding is 3X3 pixels (9 pixels in totaal), als we nu de afbeeldingsgrootte willen vergroten tot 6X6, dan moeten volgens het dichtstbijzijnde aangrenzende algoritme 6/3 (dwz 2) pixels dezelfde RGB-waarde hebben als de waardepixel naar de originele afbeelding.
Beeldschalingsprogramma:
Uitvoer: De afbeelding in grijstinten:Het gemiddelde gebruiken waardemethode, deze methode benadrukt de intensiteit van een pixel, in plaats van te laten zien uit welke RGB-waarden deze is samengesteld. Wanneer we de gemiddelde RGB-waarde berekenen en deze de RGB-waarde voor een pixel toewijzen, aangezien de RGB-waarde van de pixel hetzelfde is, kan deze geen kleur creëren, omdat alle kleuren worden gegenereerd vanwege een andere RGB-verhouding waarden, aangezien in dit geval de verhouding 1: 1: 1 zou zijn. Daarom ziet de gerenderde afbeelding eruit als een grijze afbeelding. Visuele weergave: ![]() Grijswaardenafbeeldingsprogramma:
|
Uitvoer:
Een afbeelding bijsnijden:
Bijsnijden verwijdert ongewenste pixel. Dit kan worden gedaan door de gewenste pixel in een ander raster van afbeeldingen te plaatsen, waarvan de grootte overeenkomt met de vereiste na het bijsnijden.
Beschouw een afbeelding met een grootte van 10 × 10 pixels, en als we willen alleen het midden van een afbeelding bijsnijden met een grootte van 4 × 4 pixels, dan moeten we pixelwaarden verzamelen ​​van (10-4) / 2, beginnend bij (3, 3) tot 4 pixels in de x-richting en 4 pixels in de y-richting.
Visuele weergave:
Afbeelding bijsnijden:
# met matplotlib en numpy
import
matplotlib.image als img
import
numpy als npy
# lees afbeelding in variabele m
m
=
img.imread (
"taj.png"
)
# definitie van afbeeldingsgrootte breedte (b) hoogte (h)
w, h
=
m.shape [:
2
]
# vereiste afbeeldingsgrootte na bijsnijden
xNew
=
int
(w
*
1
/
4
)
yNew
=
int
(h
*
1
/
4
)
newImage
=
npy.zeros ([xNew, yNew,
4
])
# print width source image height
print
(w)
print
(h)
voor
i
in
bereik
(
1
, xNew):
voor
j
in
bereik
(
1
, yNew):
# bijsnijden van 100 naar 100 pixels van de originele afbeelding
newImage [i, j]
=
m [
100
+
i,
100
+
j]
# sla de afbeelding op
img.imsave (
`cropped.png`
, newImage)
Uitvoer: