image — maskinseende¶
Modulen image är hjärtat i OpenMV:s stack för maskinseende. Den exponerar klassen Image – pixelbufferten i minnet som alla rutiner för ritning, filtrering, transformation och särdragsextraktion arbetar på – tillsammans med de stödjande resultatobjekt som dessa rutiner returnerar (Blob, Line, Circle, Rect, QRCode, AprilTag, DataMatrix, BarCode, …) samt de hjälpklasser som används för att konfigurera dem (Threshold, Histogram, Statistics, HaarCascade, Similarity, Percentile, Displacement, ImageIO).
Hämta en bild¶
Det finns fyra sätt att få in en Image i RAM:
Direktinfångning från kamerasensorn. Anropa
csi.CSI.snapshot()för att fånga in nästa bildruta direkt till bildbufferten; den returneradeImagerefererar till den bufferten.Från en fil. Skicka en sökväg till konstruktorn för
Image(image.Image("/sd/photo.jpg")); de format som stöds på disk är BMP, PPM/PGM, JPEG, PNG och OpenMV:s inspelningsformatImageIO.Från en ndarray. Skicka en float32
(h, w)eller(h, w, 3)ndarraytill konstruktorn förImage. Pixlarna skalas från0.0 -- 255.0till en GRAYSCALE- respektive RGB565-bild. Använd detta för att föra tensorutdata frånml(eller någonulab-pipeline) tillbaka till en ritbar bild.Tom buffert. Konstruera en
Imagemed en given storlek och ett pixelformat (image.Image(320, 240, image.RGB565)) att rita i från grunden, eller att använda som en arbetsyta för bildaritmetik.
Pixelformat¶
Varje Image har ett av följande pixelformat; valet är en avvägning mellan minne, processeringskostnad och vilka algoritmer som kan köras på det. Använd BINARY, GRAYSCALE, RGB565, BAYER, YUV422, JPEG eller PNG som argumentet pixformat när du konstruerar en bild eller konfigurerar kamerasensorn:
BINARY (1 bpp) – en bit per pixel. Det minsta formatet; används internt av tröskel- och morfologirutiner men fångas sällan in direkt från sensorn.
GRAYSCALE (8 bpp) – en byte per pixel (Y-kanalen i YUV422). Det snabbaste formatet för de flesta algoritmer för datorseende (AprilTag, kantdetektering, optiskt flöde).
RGB565 (16 bpp) – två byte per pixel, 5-bitars rött / 6-bitars grönt / 5-bitars blått. Standardfärgformatet.
BAYER (8 bpp) – rå färgdata i Bayer-mönster direkt från sensorn. Användbart för anpassad demosaicing eller för att lagra fler pixlar på mindre minne innan debayering på begäran.
YUV422 (16 bpp) – 4:2:2 kroma-subsamplad färg, två byte per pixel. Användbart när du vill köra kroma-specifika algoritmer utan att betala den fulla RGB-kostnaden.
JPEG / PNG – komprimerade buffertar. Bäst för lagring och nätverksöverföring. Operationer på pixelnivå kräver först
Image.to_grayscale()ellerImage.to_rgb565().
Arbeta med resultat¶
Metoderna för detektering / särdragsextraktion på Image returnerar objekt som du kan iterera över och kombinera – ett anrop till Image.find_blobs() returnerar en lista med Blob, ett anrop till Image.find_apriltags() returnerar en lista med AprilTag, osv. Varje resultatklass exponerar de geometriska egenskaperna för detekteringen (centroid, begränsningsruta, area, kodvärde, osv.) så att du kan agera på dem direkt eller skicka tillbaka dem till ritmetoder (Image.draw_rectangle(), Image.draw_string(), …).
Hjälpfunktioner för färgrymd¶
Modulen exponerar också små rena funktioner för att konvertera enskilda pixelvärden mellan färgrymderna binär / gråskala / RGB / LAB / YUV. Dessa är användbara när du behöver konvertera tröskelvärden eller palettposter i Python innan du skickar in dem i bildoperationer – för konvertering av hela bilder, använd to_*-metoderna på Image, som är mycket snabbare än att anropa dessa hjälpfunktioner i en loop.
Klasser¶
- class Image – Image-objekt
- class ImageIO – ImageIO-objekt
- class HaarCascade – Särdragsdeskriptor
- class Similarity – Similarity-objekt
- class Histogram – Histogram-objekt
- class Percentile – Percentile-objekt
- class Threshold – Threshold-objekt
- class Statistics – Statistics-objekt
- class Blob – Blob-objekt
- class Line – Line-objekt
- class Circle – Circle-objekt
- class Rect – Rektangelobjekt
- class QRCode – QRCode-objekt
- class AprilTag – AprilTag-objekt
- class DataMatrix – DataMatrix-objekt
- class BarCode – BarCode-objekt
- class Displacement – Displacement-objekt
- class kptmatch – Nyckelpunktsmatchningsobjekt
Funktioner¶
Hjälpfunktioner för färgrymdskonvertering¶
Var och en av X_to_Y-funktionerna nedan utför en enstaka pixelvärdeskonvertering. De tar/returnerar alla värden i OpenMV:s kanoniska intervall:
binär –
int0 – 1.gråskala –
int0 – 255.RGB –
(r, g, b)-tupel med 8-bitars heltal (var och en 0 – 255).LAB –
(l, a, b)-tupel medLi 0 – 100 ochA/Bi -128 – 127.YUV –
(y, u, v)-tupel medYi 0 – 255 ochU/Vi -128 – 127.
För konvertering av hela bilder, använd to_*-metoderna på Image, som är mycket snabbare än att anropa dessa hjälpfunktioner i en loop.
- image.binary_to_rgb(value: int) Tuple[int, int, int]¶
Konvertera ett binärt värde till en RGB-tupel.
- image.binary_to_lab(value: int) Tuple[int, int, int]¶
Konvertera ett binärt värde till en LAB-tupel.
- image.binary_to_yuv(value: int) Tuple[int, int, int]¶
Konvertera ett binärt värde till en YUV-tupel.
- image.grayscale_to_rgb(value: int) Tuple[int, int, int]¶
Konvertera ett gråskalevärde till en RGB-tupel.
- image.grayscale_to_lab(value: int) Tuple[int, int, int]¶
Konvertera ett gråskalevärde till en LAB-tupel.
- image.grayscale_to_yuv(value: int) Tuple[int, int, int]¶
Konvertera ett gråskalevärde till en YUV-tupel.
- image.rgb_to_binary(value: Tuple[int, int, int]) int¶
Konvertera en RGB-tupel till ett binärt värde.
- image.rgb_to_grayscale(value: Tuple[int, int, int]) int¶
Konvertera en RGB-tupel till ett gråskalevärde.
- image.rgb_to_lab(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Konvertera en RGB-tupel till en LAB-tupel.
- image.rgb_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Konvertera en RGB-tupel till en YUV-tupel.
- image.lab_to_binary(value: Tuple[int, int, int]) int¶
Konvertera en LAB-tupel till ett binärt värde.
- image.lab_to_grayscale(value: Tuple[int, int, int]) int¶
Konvertera en LAB-tupel till ett gråskalevärde.
- image.lab_to_rgb(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Konvertera en LAB-tupel till en RGB-tupel.
- image.lab_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Konvertera en LAB-tupel till en YUV-tupel.
- image.yuv_to_binary(value: Tuple[int, int, int]) int¶
Konvertera en YUV-tupel till ett binärt värde.
- image.yuv_to_grayscale(value: Tuple[int, int, int]) int¶
Konvertera en YUV-tupel till ett gråskalevärde.
Särdragsdeskriptorer¶
- image.HaarCascade(path: str, stages: int = -1) Cascade¶
Ladda en Haar Cascade och returnera ett
Cascade-handtag för användning medImage.find_features().pathkan vara antingen:den bokstavliga strängen
"frontalface"eller"eye"för att ladda en av de två cascades som är inbakade i firmware-ROM, elleren sökväg i filsystemet till en anpassad binär
.cascade-fil som producerats av OpenMV:s cascade-konverteringsverktyg.
stagesväljer hur många cascade-steg som ska utvärderas vid detektering.-1använder varje steg som lagras i filen. Att minska detta värde snabbar upp detekteringen till priset av fler falska positiva.
- image.load_descriptor(path: str) kp_desc | lbp_desc¶
Ladda en deskriptor från filen vid
pathoch returnera den. Filens interna typtagg avgör vilken deskriptorklass som rekonstrueras:ORB-nyckelpunktsdeskriptor – sparad av
Image.find_keypoints()följt avimage.save_descriptor().LBP-deskriptor – sparad av
Image.find_lbp()följt avimage.save_descriptor().
- image.save_descriptor(descriptor: kp_desc | lbp_desc, path: str) None¶
Serialisera
descriptor(en ORB-nyckelpunkts- eller LBP-deskriptor) till filen vidpathi OpenMV:s deskriptorfilformat. Samma fil kan senare laddas in igen viaimage.load_descriptor().
- image.match_descriptor(descriptor0, descriptor1, threshold: int = 85, filter_outliers: bool = False) int | kptmatch¶
Matcha två deskriptorer av samma typ.
För två LBP-deskriptorer – returnerar ett heltal för Hamming-avståndet mellan dem (lägre är en närmare matchning).
För två ORB-nyckelpunktsdeskriptorer – returnerar en
kptmatchsom beskriver klustret av matchade nyckelpunkter, ellerNoneom ingen matchning klararthreshold.
threshold(0 – 100) anger hur strikt ORB-matchningen är när ett nyckelpunktspar accepteras. Lägre värden skärper matchningen genom att avvisa svaga närmaste-granne-matchningar.filter_outliersaktiverar avvisning av avvikare i RANSAC-stil över mängden matchade nyckelpunkter. Använd det när du förväntar dig en enda stel transform mellan de två vyerna; inaktivera det när de matchade nyckelpunkterna spänner över flera objekt.
Hjälpfunktioner för blob-geometri¶
Dessa hjälpfunktioner tar en Blob (som returneras av Image.find_blobs()) och beräknar ytterligare geometriska egenskaper på begäran. De finns på modulnivå – inte på Blob – så den grundläggande find_blobs()-vägen betalar inte för dem om du inte ber om det.
- image.get_solidity(blob: blob) float¶
Returnerar soliditeten (
blob.pixels / convex_hull_area) förblob. Flyttal, 0 – 1; 1.0 betyder att bloben helt fyller sitt konvexa hölje.
- image.get_convexity(blob: blob) float¶
Returnerar konvexiteten (
convex_hull_perimeter / blob.perimeter) förblob. Flyttal, 0 – 1; 1.0 är en perfekt konvex blob.
- image.get_major_axis_line(blob: blob) line¶
Returnerar en
Linelängs huvudaxeln förblob(den längre av de två huvudaxlarna i den roterade rektangeln med minsta area).
- image.get_minor_axis_line(blob: blob) line¶
Returnerar en
Linelängs den mindre axeln förblob(den kortare av de två huvudaxlarna i den roterade rektangeln med minsta area).
- image.get_enclosed_ellipse(blob: blob) Tuple[int, int, int, int, int]¶
Returnerar en 5-tupel
(cx, cy, a, b, rotation)som beskriver den ellips som är inskriven i den roterade rektangeln med minsta area runtblob:cx/cy– ellipsens centrum i pixlar (heltal).a/b– halvaxlarnas längder i pixlar (heltal).rotation– ellipsens rotation i grader (heltal).
Detta är en vanlig tupel, inte en attrtuple, så fälten är endast åtkomliga via index.
Konstanter¶
Pixelformat¶
Skicka något av följande som argumentet pixformat till konstruktorn för Image eller till csi.CSI.pixformat().
- image.BINARY: int¶
1-bit-per-pixel bitmapp. Det minsta formatet – används internt av tröskling och morfologi, fångas sällan in direkt från en sensor.
- image.GRAYSCALE: int¶
8-bit-per-pixel gråskala (en byte per pixel). Det snabbaste formatet för de flesta algoritmer för datorseende (AprilTag, kantdetektering, optiskt flöde).
- image.RGB565: int¶
16-bit-per-pixel färg packad som 5 bitar rött / 6 bitar grönt / 5 bitar blått. Standardfärgformatet.
- image.BAYER: int¶
8-bit-per-pixel rå Bayer-data direkt från sensorn. De flesta bildbehandlingsmetoder är inte tillgängliga på Bayer-bilder; använd detta när du vill debayera på begäran eller lagra fler pixlar på mindre minne.
- image.YUV422: int¶
4:2:2 kroma-subsamplad färg, två byte per pixel, packad som
Y1, U, Y2, Vper pixelpar. Endast vissa bildbehandlingsmetoder fungerar direkt på YUV422.
- image.JPEG: int¶
Komprimerad JPEG-buffert. Operationer på pixelnivå kräver först
Image.to_grayscale()ellerImage.to_rgb565().
- image.PNG: int¶
Komprimerad PNG-buffert. Operationer på pixelnivå kräver först
Image.to_grayscale()ellerImage.to_rgb565().
Färgpaletter¶
Skicka något av följande till Image.to_rainbow(), Image.to_ironbow(), Image.draw_image() (color_palette=) eller till csi.CSI.color_palette() för att färglägga en gråskalebild.
- image.PALETTE_IRONBOW: int¶
Icke-linjär ”ironbow”-palett som efterliknar utseendet hos FLIR Lepton-värmesökaren.
- image.PALETTE_DEPTH: int¶
Djupbildspalett. Endast tillgänglig på byggen med stöd för djupsensor (ToF-pipelinen – t.ex. OpenMV Cam AE3 eller någon kamera med en ToF Pmod ansluten).
- image.PALETTE_EVT_DARK: int¶
Palett för att visualisera bildrutor från GENX320-händelsekameran mot en mörk bakgrund. Skicka till
csi.CSI.color_paletteför att låta GENX320-drivrutinen sända ut färglagda RGB565-bildrutor i histogramläge, eller tillImage.draw_image()color_palette=när en gråskalehändelsebild ska färgläggas.Endast tillgänglig på byggen med GENX320-stöd (OpenMV Cam AE3 och GENX320 Pmod).
- image.PALETTE_EVT_LIGHT: int¶
Palett för att visualisera bildrutor från GENX320-händelsekameran mot en ljus bakgrund. Samma utskick och tillgänglighet som
PALETTE_EVT_DARK.
Skalningslägen¶
Skicka något av följande som argumentet hint till Image.draw_image(), Image.scale() eller liknande skalningsmetoder.
Tips för ritning / draw_image¶
Bit-OR:a ihop någon av dessa och skicka som argumentet hint till Image.draw_image().
- image.CENTER: int¶
Centrera källan på destinationen. Eventuella explicita x/y-förskjutningar blir då förskjutningar från centrum i stället för från övre vänstra hörnet.
- image.EXTRACT_RGB_CHANNEL_FIRST: int¶
Vid extrahering av en RGB-kanal via
Image.draw_image(), extrahera kanalen före skalning. Utan detta tips extraheras kanalen efter skalning.
- image.APPLY_COLOR_PALETTE_FIRST: int¶
Vid tillämpning av en färgpalett via
Image.draw_image(), tillämpa paletten före skalning. Utan detta tips tillämpas paletten efter skalning.
- image.SCALE_ASPECT_KEEP: int¶
Skala källan så att den passar inuti destinationen med bibehållet bildförhållande (letterboxar när förhållandena skiljer sig åt).
- image.SCALE_ASPECT_EXPAND: int¶
Skala källan så att den fyller destinationen med bibehållet bildförhållande (beskär när förhållandena skiljer sig åt).
- image.SCALE_ASPECT_IGNORE: int¶
Skala källan så att den fyller destinationen, utan hänsyn till bildförhållande.
JPEG-subsampling¶
Skicka något av följande som argumentet subsampling till Image.to_jpeg(), Image.compress() eller Image.save() när en JPEG skrivs.
- image.JPEG_SUBSAMPLING_AUTO: int¶
Välj kroma-subsampling automatiskt baserat på JPEG-kvalitetsinställningen.
Mallmatchning¶
Skicka något av följande som argumentet search till Image.find_template().
Kantdetektering¶
Skicka något av följande som argumentet algorithm till Image.find_edges().
- image.EDGE_CANNY: int¶
Canny-kantdetektor – gradientmagnitud + icke-max-undertryckning + hysteres. Högre kvalitet, långsammare.
- image.EDGE_SIMPLE: int¶
Tröskelbaserad kantdetektor med högpassfilter. Snabbare men producerar tjockare, brusigare kanter än
EDGE_CANNY.
ORB-hörndetektorer¶
Skicka något av följande som argumentet corner_detector till Image.find_keypoints().
- image.CORNER_FAST: int¶
FAST-hörndetektor. Snabbare än
CORNER_AGASTmen mindre exakt.
- image.CORNER_AGAST: int¶
AGAST-hörndetektor. Långsammare än
CORNER_FASTmen producerar stabilare nyckelpunkter.
AprilTag-familjer¶
Bit-OR:a valfri kombination av följande och skicka som argumentet families till Image.find_apriltags(). Varje familj är villkorad av sin egen byggalternativ i firmware; familjer som inte stöds saknas vid körning i stället för att alltid vara noll.
Streckkodssymboliker¶
De värden som rapporteras i BarCode.type för poster som returneras av Image.find_barcodes().
- image.PDF417: int¶
PDF417 2D-staplad streckkod. Konstanten finns för fullständighetens skull, men streckkodsavkodaren implementerar för närvarande inte PDF417 –
Image.find_barcodes()returnerar inte detekteringar av denna typ.