image — konenäkö¶
image-moduuli on OpenMV:n konenäköpinon sydän. Se tarjoaa Image-luokan – muistissa olevan pikselipuskurin, jonka päällä jokainen piirto-, suodatus-, muunnos- ja piirteenpoimintarutiini toimii – yhdessä niiden rutiinien palauttamien tulosobjektien kanssa (Blob, Line, Circle, Rect, QRCode, AprilTag, DataMatrix, BarCode, …) sekä niiden määrittelyyn käytettävien apuluokkien kanssa (Threshold, Histogram, Statistics, HaarCascade, Similarity, Percentile, Displacement, ImageIO).
Kuvan hankkiminen¶
On neljä tapaa saada Image RAM-muistiin:
Reaaliaikainen kaappaus kamerasensorilta. Kutsu
csi.CSI.snapshot()kaapataksesi seuraavan kehyksen suoraan kehyspuskuriin; palautettuImageviittaa tuohon puskuriin.Tiedostosta. Anna polku
Image-konstruktorille (image.Image("/sd/photo.jpg")); tuetut levyformaatit ovat BMP, PPM/PGM, JPEG, PNG ja OpenMV:nImageIO-tallennusmuoto.Ndarray-objektista. Anna float32-tyyppinen
(h, w)- tai(h, w, 3)-muotoinenndarrayImage-konstruktorille. Pikselit skaalataan välistä0.0 -- 255.0GRAYSCALE- tai vastaavasti RGB565-kuvaksi. Käytä tätä tuodaksesiml-moduulin (tai minkä tahansaulab-putken) tensorituloksen takaisin piirrettäväksi kuvaksi.Tyhjä puskuri. Luo
Imageannetulla koolla ja pikseliformaatilla (image.Image(320, 240, image.RGB565)) piirtääksesi siihen tyhjästä tai käyttääksesi sitä apupintana kuvan aritmetiikassa.
Pikseliformaatit¶
Jokaisella Image-objektilla on yksi seuraavista pikseliformaateista; valinta tasapainottaa muistinkäytön, prosessointikustannuksen ja sen, mitä algoritmeja sillä voi ajaa. Käytä arvoja BINARY, GRAYSCALE, RGB565, BAYER, YUV422, JPEG tai PNG pixformat-argumenttina kuvaa luotaessa tai kamerasensoria määriteltäessä:
BINARY (1 bpp) – yksi bitti pikseliä kohden. Pienin formaatti; sitä käyttävät sisäisesti kynnystys- ja morfologiarutiinit, mutta sitä kaapataan harvoin suoraan sensorilta.
GRAYSCALE (8 bpp) – yksi tavu pikseliä kohden (YUV422:n Y-kanava). Nopein formaatti useimmille konenäköalgoritmeille (AprilTag, reunantunnistus, optinen virtaus).
RGB565 (16 bpp) – kaksi tavua pikseliä kohden, 5-bittinen punainen / 6-bittinen vihreä / 5-bittinen sininen. Oletusväriformaatti.
BAYER (8 bpp) – raaka Bayer-kuviollinen väridata suoraan sensorilta. Hyödyllinen mukautettuun demosaikointiin tai useamman pikselin tallentamiseen pienempään muistiin ennen tarvittaessa tehtävää debayerointia.
YUV422 (16 bpp) – 4:2:2-krominanssialinäytteistetty väri, kaksi tavua pikseliä kohden. Hyödyllinen kun haluat krominanssikohtaisia algoritmeja maksamatta täyttä RGB-hintaa.
JPEG / PNG – pakatut puskurit. Parhaita tallennukseen ja verkkosiirtoon. Pikselitason operaatiot edellyttävät ensin
Image.to_grayscale()- taiImage.to_rgb565()-kutsua.
Tulosten käsittely¶
Image-luokan tunnistus- ja piirteenpoimintametodit palauttavat objekteja, joiden yli voit iteroida ja joita voit yhdistellä – Image.find_blobs()-kutsu palauttaa listan Blob-objekteja, Image.find_apriltags()-kutsu palauttaa listan AprilTag-objekteja jne. Jokainen tulosluokka tarjoaa tunnistuksen geometriset ominaisuudet (keskipisteen, rajauslaatikon, pinta-alan, koodiarvon jne.), joten voit toimia niiden pohjalta suoraan tai välittää ne takaisin piirtometodeille (Image.draw_rectangle(), Image.draw_string(), …).
Väriavaruuden apufunktiot¶
Moduuli tarjoaa myös pieniä puhtaita funktioita yksittäisten pikseliarvojen muuntamiseen binääri- / harmaasävy- / RGB- / LAB- / YUV-väriavaruuksien välillä. Nämä ovat hyödyllisiä kun sinun täytyy muuntaa kynnysarvoja tai palettimerkintöjä Pythonissa ennen niiden välittämistä kuvaoperaatioihin – koko kuvan muuntamiseen käytä Image-luokan to_*-metodeja, jotka ovat paljon nopeampia kuin näiden apufunktioiden kutsuminen silmukassa.
Luokat¶
- class Image – Image-objekti
- class ImageIO – ImageIO-objekti
- class HaarCascade – piirrekuvaaja
- class Similarity – Similarity-objekti
- class Histogram – Histogram-objekti
- class Percentile – Percentile-objekti
- class Threshold – Threshold-objekti
- class Statistics – Statistics-objekti
- class Blob – Blob-objekti
- class Line – Line-objekti
- class Circle – Circle-objekti
- class Rect – Rectangle-objekti
- class QRCode – QRCode-objekti
- class AprilTag – AprilTag-objekti
- class DataMatrix – DataMatrix-objekti
- class BarCode – BarCode-objekti
- class Displacement – Displacement-objekti
- class kptmatch – Keypoint match -objekti
Funktiot¶
Väriavaruuden muunnoksen apufunktiot¶
Jokainen alla olevista X_to_Y-funktioista suorittaa yhden pikseliarvon muunnoksen. Ne kaikki ottavat/palauttavat arvoja OpenMV:n kanonisilla väleillä:
binary –
int0 – 1.grayscale –
int0 – 255.RGB –
(r, g, b)-monikko 8-bittisistä kokonaisluvuista (kukin 0 – 255).LAB –
(l, a, b)-monikko, jossaLon välillä 0 – 100 jaA/Bvälillä -128 – 127.YUV –
(y, u, v)-monikko, jossaYon välillä 0 – 255 jaU/Vvälillä -128 – 127.
Koko kuvan muuntamiseen käytä Image-luokan to_*-metodeja, jotka ovat paljon nopeampia kuin näiden apufunktioiden kutsuminen silmukassa.
- image.rgb_to_lab(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Muuntaa RGB-monikon LAB-monikoksi.
- image.rgb_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Muuntaa RGB-monikon YUV-monikoksi.
- image.lab_to_rgb(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Muuntaa LAB-monikon RGB-monikoksi.
- image.lab_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Muuntaa LAB-monikon YUV-monikoksi.
Piirrekuvaajat¶
- image.HaarCascade(path: str, stages: int = -1) Cascade¶
Lataa Haar-kaskadi ja palauttaa
Cascade-kahvan käytettäväksiImage.find_features()-metodin kanssa.pathvoi olla joko:kirjaimellinen merkkijono
"frontalface"tai"eye"ladatakseen toisen kahdesta laiteohjelmiston ROM-muistiin sisäänrakennetusta kaskadista, taitiedostojärjestelmäpolku mukautettuun
.cascade-binääritiedostoon, joka on tuotettu OpenMV:n kaskadinmuunnostyökaluilla.
stagesvalitsee, kuinka monta kaskadivaihetta arvioidaan tunnistushetkellä.-1käyttää jokaista tiedostoon tallennettua vaihetta. Tämän arvon pienentäminen nopeuttaa tunnistusta useampien väärien positiivisten tulosten kustannuksella.
- image.load_descriptor(path: str) kp_desc | lbp_desc¶
Lataa kuvaajan tiedostosta polussa
pathja palauttaa sen. Tiedoston sisäinen tyyppimerkintä valitsee, mikä kuvaajaluokka rekonstruoidaan:ORB-avainpistekuvaaja – tallennettu
Image.find_keypoints()-metodilla, jota seuraaimage.save_descriptor().LBP-kuvaaja – tallennettu
Image.find_lbp()-metodilla, jota seuraaimage.save_descriptor().
- image.save_descriptor(descriptor: kp_desc | lbp_desc, path: str) None¶
Sarjallistaa argumentin
descriptor(ORB-avainpiste- tai LBP-kuvaaja) tiedostoon polussapathOpenMV:n kuvaajatiedostomuodossa. Saman tiedoston voi myöhemmin ladata uudelleenimage.load_descriptor()-metodilla.
- image.match_descriptor(descriptor0, descriptor1, threshold: int = 85, filter_outliers: bool = False) int | kptmatch¶
Sovittaa kaksi samantyyppistä kuvaajaa.
Kahdelle LBP-kuvaajalle – palauttaa kokonaislukuna niiden välisen Hamming-etäisyyden (pienempi tarkoittaa lähempää osumaa).
Kahdelle ORB-avainpistekuvaajalle – palauttaa
kptmatch-objektin, joka kuvaa sovitettujen avainpisteiden ryppään, taiNone, jos mikään osuma ei ylitä arvoathreshold.
threshold(0 – 100) asettaa, kuinka tiukkaa ORB-sovitus on avainpisteparia hyväksyttäessä. Pienemmät arvot tiukentavat sovitusta hylkäämällä heikot lähimmän naapurin osumat.filter_outliersottaa käyttöön RANSAC-tyylisen poikkeavien arvojen hylkäyksen sovitettujen avainpisteiden joukossa. Käytä sitä, kun odotat yhtä jäykkää muunnosta kahden näkymän välillä; poista se käytöstä, kun sovitetut avainpisteet kattavat useita kohteita.
Blobin geometrian apufunktiot¶
Nämä apufunktiot ottavat Blob-objektin (sellaisena kuin Image.find_blobs() sen palauttaa) ja laskevat lisää geometrisia ominaisuuksia tarvittaessa. Ne sijaitsevat moduulitasolla – eivät Blob-luokassa – joten perustason find_blobs()-polku ei maksa niistä, ellet sitä pyydä.
- image.get_solidity(blob: blob) float¶
Palauttaa argumentin
blobjähmeyden (blob.pixels / convex_hull_area). Liukuluku, 0 – 1; 1.0 tarkoittaa, että blob täyttää konveksin verhonsa kokonaan.
- image.get_convexity(blob: blob) float¶
Palauttaa argumentin
blobkonveksisuuden (convex_hull_perimeter / blob.perimeter). Liukuluku, 0 – 1; 1.0 on täysin konveksi blob.
- image.get_major_axis_line(blob: blob) line¶
Palauttaa
Line-objektin argumentinblobpääakselia pitkin (pienimmän pinta-alan kierretyn suorakulmion kahdesta pääakselista pidemmän).
- image.get_minor_axis_line(blob: blob) line¶
Palauttaa
Line-objektin argumentinblobsivuakselia pitkin (pienimmän pinta-alan kierretyn suorakulmion kahdesta pääakselista lyhyemmän).
- image.get_enclosing_circle(blob: blob) circle¶
Palauttaa
Circle-objektin, joka ympäröi argumentinblob.
- image.get_enclosed_ellipse(blob: blob) Tuple[int, int, int, int, int]¶
Palauttaa 5-monikon
(cx, cy, a, b, rotation), joka kuvaa argumentinblobympärille piirretyn pienimmän pinta-alan kierretyn suorakulmion sisään asetetun ellipsin:cx/cy– ellipsin keskipiste pikseleinä (kokonaisluku).a/b– puoliakselien pituudet pikseleinä (kokonaisluku).rotation– ellipsin kierto asteina (kokonaisluku).
Tämä on tavallinen monikko, ei attrtuple, joten kenttiin pääsee käsiksi vain indeksin perusteella.
Vakiot¶
Pikseliformaatit¶
Anna mikä tahansa seuraavista pixformat-argumenttina Image-konstruktorille tai csi.CSI.pixformat()-metodille.
- image.BINARY: int¶
1 bitti pikseliä kohden -bittikartta. Pienin formaatti – sitä käyttävät sisäisesti kynnystys ja morfologia, sitä kaapataan harvoin suoraan sensorilta.
- image.GRAYSCALE: int¶
8 bittiä pikseliä kohden -harmaasävy (yksi tavu pikseliä kohden). Nopein formaatti useimmille konenäköalgoritmeille (AprilTag, reunantunnistus, optinen virtaus).
- image.RGB565: int¶
16 bittiä pikseliä kohden -väri pakattuna muotoon 5 bittiä punainen / 6 bittiä vihreä / 5 bittiä sininen. Oletusväriformaatti.
- image.BAYER: int¶
8 bittiä pikseliä kohden -raaka Bayer-data suoraan sensorilta. Useimmat kuvankäsittelymetodit eivät ole käytettävissä Bayer-kuville; käytä tätä kun haluat debayeroida tarvittaessa tai tallentaa useampia pikseleitä pienempään muistiin.
- image.YUV422: int¶
4:2:2-krominanssialinäytteistetty väri, kaksi tavua pikseliä kohden, pakattuna muotoon
Y1, U, Y2, Vpikseliparia kohden. Vain osa kuvankäsittelymetodeista toimii suoraan YUV422:n päällä.
- image.JPEG: int¶
Pakattu JPEG-puskuri. Pikselitason operaatiot edellyttävät ensin
Image.to_grayscale()- taiImage.to_rgb565()-kutsua.
- image.PNG: int¶
Pakattu PNG-puskuri. Pikselitason operaatiot edellyttävät ensin
Image.to_grayscale()- taiImage.to_rgb565()-kutsua.
Väripaletit¶
Anna mikä tahansa seuraavista Image.to_rainbow()-, Image.to_ironbow()- tai Image.draw_image()-metodille (color_palette=) tai csi.CSI.color_palette()-metodille värittääksesi harmaasävykuvan.
- image.PALETTE_IRONBOW: int¶
Epälineaarinen ”ironbow”-paletti, joka jäljittelee FLIR Lepton -lämpökameran etsimen ulkoasua.
- image.PALETTE_DEPTH: int¶
Syvyyskuvapaletti. Saatavilla vain käännöksissä, joissa on syvyyssensorituki (ToF-putki – esim. OpenMV Cam AE3 tai mikä tahansa kamera, johon on liitetty ToF Pmod).
- image.PALETTE_EVT_DARK: int¶
Paletti GENX320-tapahtumakamerakehysten visualisointiin tummalla taustalla. Anna se
csi.CSI.color_palette-metodille saadaksesi GENX320-ajurin tuottamaan väritetyt RGB565-kehykset histogrammitilassa, taiImage.draw_image()-metodillecolor_palette=värittäessäsi harmaasävyisen tapahtumakuvan.Saatavilla vain käännöksissä, joissa on GENX320-tuki (OpenMV Cam AE3 ja GENX320 Pmod).
- image.PALETTE_EVT_LIGHT: int¶
Paletti GENX320-tapahtumakamerakehysten visualisointiin vaalealla taustalla. Sama lähetyslogiikka ja saatavuus kuin
PALETTE_EVT_DARK-paletilla.
Skaalaustilat¶
Anna mikä tahansa seuraavista hint-argumenttina Image.draw_image()-, Image.scale()- tai vastaaville skaalausmetodeille.
Piirto- / draw_image-vihjeet¶
Yhdistä bittitason TAI-operaatiolla mikä tahansa näistä ja anna Image.draw_image()-metodin hint-argumenttina.
- image.CENTER: int¶
Keskittää lähteen kohteeseen. Mahdollisista eksplisiittisistä x/y-siirtymistä tulee tällöin siirtymiä keskeltä eikä vasemmasta yläkulmasta.
- image.EXTRACT_RGB_CHANNEL_FIRST: int¶
Kun poimitaan RGB-kanava
Image.draw_image()-metodilla, poimii kanavan ennen skaalausta. Ilman tätä vihjettä kanava poimitaan skaalauksen jälkeen.
- image.APPLY_COLOR_PALETTE_FIRST: int¶
Kun käytetään väripalettia
Image.draw_image()-metodilla, soveltaa paletin ennen skaalausta. Ilman tätä vihjettä paletti sovelletaan skaalauksen jälkeen.
- image.SCALE_ASPECT_KEEP: int¶
Skaalaa lähteen mahtumaan kohteen sisään säilyttäen kuvasuhteen (lisää kirjekuoripalkit, kun suhteet eroavat).
- image.SCALE_ASPECT_EXPAND: int¶
Skaalaa lähteen täyttämään kohteen säilyttäen kuvasuhteen (rajaa, kun suhteet eroavat).
JPEG-alinäytteistys¶
Anna mikä tahansa seuraavista subsampling-argumenttina Image.to_jpeg()-, Image.compress()- tai Image.save()-metodille JPEG:tä kirjoitettaessa.
- image.JPEG_SUBSAMPLING_AUTO: int¶
Valitse krominanssin alinäytteistys automaattisesti JPEG-laatuasetuksen perusteella.
- image.JPEG_SUBSAMPLING_444: int¶
Pakota 4:4:4-krominanssin alinäytteistys (ei krominanssin pakkausta).
Mallisovitus¶
Anna jompikumpi seuraavista search-argumenttina Image.find_template()-metodille.
Reunantunnistus¶
Anna jompikumpi seuraavista algorithm-argumenttina Image.find_edges()-metodille.
- image.EDGE_CANNY: int¶
Canny-reunantunnistin – gradientin suuruus + ei-maksimien vaimennus + hystereesi. Laadukkaampi, hitaampi.
- image.EDGE_SIMPLE: int¶
Kynnystetty ylipäästösuodatinpohjainen reunantunnistin. Nopeampi, mutta tuottaa paksumpia ja kohinaisempia reunoja kuin
EDGE_CANNY.
ORB-kulmantunnistimet¶
Anna jompikumpi seuraavista corner_detector-argumenttina Image.find_keypoints()-metodille.
- image.CORNER_FAST: int¶
FAST-kulmantunnistin. Nopeampi kuin
CORNER_AGAST, mutta epätarkempi.
- image.CORNER_AGAST: int¶
AGAST-kulmantunnistin. Hitaampi kuin
CORNER_FAST, mutta tuottaa vakaampia avainpisteitä.
AprilTag-perheet¶
Yhdistä bittitason TAI-operaatiolla mikä tahansa yhdistelmä seuraavista ja anna families-argumenttina Image.find_apriltags()-metodille. Jokainen perhe on portitettu omalla käännösvalinnallaan laiteohjelmistossa; tukemattomat perheet puuttuvat ajonaikana sen sijaan, että ne olisivat aina nolla.
Viivakoodisymboliikat¶
Arvot, jotka raportoidaan kentässä BarCode.type Image.find_barcodes()-metodin palauttamille merkinnöille.
- image.PDF417: int¶
PDF417 2D -pinottu viivakoodi. Vakio on olemassa täydellisyyden vuoksi, mutta viivakoodidekooderi ei tällä hetkellä toteuta PDF417:ää –
Image.find_barcodes()ei palauta tämäntyyppisiä tunnistuksia.