Forum » Programiranje » Skeniranje BMP ce vsebuje SubSliko
Skeniranje BMP ce vsebuje SubSliko
Vapo1 ::
torej... znam naloziti iz majhnega bmp-ja (ki je zelo majhen- majhna slikica) v "Mali_bitmap"... potem znam narediti Screenshot celega ekrana in ga dati v "Velik_bitmap"....
zanima me pa kako bi zdaj poskeniral celoten "Velik_bitmap" da bi preveril ce vsebuje "Mali_bitmap"
torej recimo da je "majhna slikica" slikica ikone od "recicle bin"... in ce bi bila "velika slika" screenshot Desktopa.. potem bi moralo javiti da vsebuje to majhno slikico recicle bina...
kakrsne koli ideje..
thanks
zanima me pa kako bi zdaj poskeniral celoten "Velik_bitmap" da bi preveril ce vsebuje "Mali_bitmap"
torej recimo da je "majhna slikica" slikica ikone od "recicle bin"... in ce bi bila "velika slika" screenshot Desktopa.. potem bi moralo javiti da vsebuje to majhno slikico recicle bina...
kakrsne koli ideje..
thanks
Binji ::
hmm.. ideja ki mi pade na pamet je, da bi iskal po pikslih v vrstici, dokler ne najdes piksla, ki po rgb ustreza levemu zgornjemu pikslu male slike. Potem gres preverjat ce ustreza tudi naprej. Ce ne, pac isces naprej.
Kdor ne navija ni Slovenc, hej, hej, hej!
MTm2H37rqt7B ::
Kolikor sem delal z OpenCV... ima funkcijo MatchTemplate, kar dela tocno to kar si ti omenil. Podas eno matriko kot template, eno matriko kot iskani zadevo, potem pa eno matriko kot rezultat.
Potem pa samo se isces maxium v rezultatu. Ta ti pa pove, koordinate maximuma in njegovo vrednost. Vbistvu zelo enostavno za sprogramirat.
Potem pa samo se isces maxium v rezultatu. Ta ti pa pove, koordinate maximuma in njegovo vrednost. Vbistvu zelo enostavno za sprogramirat.
netanyahu ::
Če je mala slika znotraj velike slike enake velikosti kot samostojna mala slike in če mala slika znotraj velike slike ni rotirana glede na samostojno malo sliko, potem križna korelacija med slikama.
Če je mala slika znotraj velike slike lahko rotirana, skalirana ali delno zakrita, potem algoritem SIFT.
Če je mala slika znotraj velike slike lahko rotirana, skalirana ali delno zakrita, potem algoritem SIFT.
fiction ::
Pomoje je brezveze komplicirati s Scale-Invariant Feature Transform-om.
Ceprav moram pa reci, da se kolikor sem to uporabljal na faksu za
razpoznavanje parkomatov na fotografijah super obnese.
Paziti je treba le na to, da imas vec kot 512 MB RAM-a (zadeva je kar
pomnilnisko pozresna).
Pri meni je trajalo za to, da sem pridobil keypointe (tocke,
ki so invariante glede na povecavo in delno tudi na kot posnetka)
skoraj 30 minut (swap).
Kasneje sem isto probal se z 1,5 GB RAM-a in je bilo prakticno
takoj.
Lahko samo premikas majhno sliko po vecji (po 1 piksel okrog) in gledas kje je korelacija najvecja
poleg tega pa nad nekim thresholdom.
Problem je le, da imas lahko za screenshot namizja razlicne resolucije.
Najlazje je, da imas potem vec razlicnih majhnih slik s katerimi isces
(ali pa pac eno vedno scalas na ravno pravo velikost). Fora je, da je
teh povecav itak samo ene par (in ne gre ravno za poljuben scale faktor).
Ceprav moram pa reci, da se kolikor sem to uporabljal na faksu za
razpoznavanje parkomatov na fotografijah super obnese.
Paziti je treba le na to, da imas vec kot 512 MB RAM-a (zadeva je kar
pomnilnisko pozresna).
Pri meni je trajalo za to, da sem pridobil keypointe (tocke,
ki so invariante glede na povecavo in delno tudi na kot posnetka)
skoraj 30 minut (swap).
Kasneje sem isto probal se z 1,5 GB RAM-a in je bilo prakticno
takoj.
Lahko samo premikas majhno sliko po vecji (po 1 piksel okrog) in gledas kje je korelacija najvecja
poleg tega pa nad nekim thresholdom.
Problem je le, da imas lahko za screenshot namizja razlicne resolucije.
Najlazje je, da imas potem vec razlicnih majhnih slik s katerimi isces
(ali pa pac eno vedno scalas na ravno pravo velikost). Fora je, da je
teh povecav itak samo ene par (in ne gre ravno za poljuben scale faktor).
MTm2H37rqt7B ::
Evo, progi z Intel OpenCV:
Kode je vec zato, ker prikazemo vec razlicnih nacinov primerjav (6 rezultatov). Za vsako tudi izpisemo kordinato maximuma.
Progi nam narise glavno in referencno slikico. Narise tudi vse rezultate, za prikaz se najlepse vidi normirane postopke (saj odtenka visjega od 255 monitor ne zna izristai).
Kaj rabis za to? Delal sem z Visual C++ Express 2007 in Intel OpenCV (je opensource). Navodila za implementirat OCV v VisalC++ so na uradni strani. OCV je zelo hitra zadeva.
#include "stdafx.h" #include <cv.h> #include <highgui.h> #include <iostream> int main( int argc, char** argv ) { char* imageName = "glavna.bmp"; char* refName = "ref.bmp"; IplImage* im = cvLoadImage(imageName, -1); IplImage* ref = cvLoadImage(refName, -1); IplImage* imG = cvCreateImage(cvSize(im->width, im->height), 8, 1); cvCvtColor(im, imG, CV_BGR2GRAY); IplImage* refG = cvCreateImage(cvSize(ref->width, ref->height), 8, 1); cvCvtColor(ref, refG, CV_BGR2GRAY); int resultWidth = imG->width - refG->width + 1; int resultHeight = imG->height - refG->height + 1; IplImage* result0 = cvCreateImage(cvSize(resultWidth, resultHeight), IPL_DEPTH_32F, 1); IplImage* result1 = cvCreateImage(cvSize(resultWidth, resultHeight), IPL_DEPTH_32F, 1); IplImage* result2 = cvCreateImage(cvSize(resultWidth, resultHeight), IPL_DEPTH_32F, 1); IplImage* result3 = cvCreateImage(cvSize(resultWidth, resultHeight), IPL_DEPTH_32F, 1); IplImage* result4 = cvCreateImage(cvSize(resultWidth, resultHeight), IPL_DEPTH_32F, 1); IplImage* result5 = cvCreateImage(cvSize(resultWidth, resultHeight), IPL_DEPTH_32F, 1); cvMatchTemplate(imG, refG, result0, CV_TM_SQDIFF); cvMatchTemplate(imG, refG, result1, CV_TM_SQDIFF_NORMED); cvMatchTemplate(imG, refG, result2, CV_TM_CCORR); cvMatchTemplate(imG, refG, result3, CV_TM_CCORR_NORMED); cvMatchTemplate(imG, refG, result4, CV_TM_CCOEFF); cvMatchTemplate(imG, refG, result5, CV_TM_CCOEFF_NORMED); double minVal = 5.0; double maxVal = NULL; CvPoint minLoc; CvPoint maxLoc; cvMinMaxLoc(result0, &minVal, &maxVal, &minLoc, &maxLoc, 0); printf("SQDIFF Minimum location: X: %d, Y: %d\n",minLoc.x,minLoc.y); printf("SQDIFF Maximum location: X: %d, Y: %d\n",maxLoc.x,maxLoc.y); cvMinMaxLoc(result1, &minVal, &maxVal, &minLoc, &maxLoc, 0); printf("SQDIFFN Minimum location: X: %d, Y: %d\n",minLoc.x,minLoc.y); printf("SQDIFFN Maximum location: X: %d, Y: %d\n",maxLoc.x,maxLoc.y); cvMinMaxLoc(result2, &minVal, &maxVal, &minLoc, &maxLoc, 0); printf("CCORR Minimum location: X: %d, Y: %d\n",minLoc.x,minLoc.y); printf("CCORR Maximum location: X: %d, Y: %d\n",maxLoc.x,maxLoc.y); cvMinMaxLoc(result3, &minVal, &maxVal, &minLoc, &maxLoc, 0); printf("CCORRN Minimum location: X: %d, Y: %d\n",minLoc.x,minLoc.y); printf("CCORRN Maximum location: X: %d, Y: %d\n",maxLoc.x,maxLoc.y); cvMinMaxLoc(result4, &minVal, &maxVal, &minLoc, &maxLoc, 0); printf("CCOEFF Minimum location: X: %d, Y: %d\n",minLoc.x,minLoc.y); printf("CCOEFF Maximum location: X: %d, Y: %d\n",maxLoc.x,maxLoc.y); cvMinMaxLoc(result5, &minVal, &maxVal, &minLoc, &maxLoc, 0); printf("CCOEFFN Minimum location: X: %d, Y: %d\n",minLoc.x,minLoc.y); printf("CCOEFFN Maximum location: X: %d, Y: %d\n",maxLoc.x,maxLoc.y); cvNamedWindow("SQDIFF", 0 ); cvNamedWindow("SQDIFF_NORMED",0); cvNamedWindow("CCORR",0); cvNamedWindow("CCORR_NORMED",0); cvNamedWindow("CCOEFF",0); cvNamedWindow("CCOEEFF_NORMED",0); cvShowImage("SQDIFF", result0); cvShowImage("SQDIFF_NORMED", result1); cvShowImage("CCORR", result2); cvShowImage("CCORR_NORMED", result3); cvShowImage("CCOEFF", result4); cvShowImage("CCOEEFF_NORMED", result5); cvNamedWindow("Image",0); cvNamedWindow("Template",0); cvShowImage("Image", imG); cvShowImage("Template", refG); cvWaitKey(0); cvReleaseImage(&imG); cvReleaseImage(&refG); cvReleaseImage(&result0); cvReleaseImage(&result1); cvReleaseImage(&result2); cvReleaseImage(&result3); cvReleaseImage(&result4); cvReleaseImage(&result5); cvDestroyAllWindows(); return 0; }
Kode je vec zato, ker prikazemo vec razlicnih nacinov primerjav (6 rezultatov). Za vsako tudi izpisemo kordinato maximuma.
Progi nam narise glavno in referencno slikico. Narise tudi vse rezultate, za prikaz se najlepse vidi normirane postopke (saj odtenka visjega od 255 monitor ne zna izristai).
Kaj rabis za to? Delal sem z Visual C++ Express 2007 in Intel OpenCV (je opensource). Navodila za implementirat OCV v VisalC++ so na uradni strani. OCV je zelo hitra zadeva.
Zgodovina sprememb…
- spremenilo: MTm2H37rqt7B ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Izdelava algoritmaOddelek: Znanost in tehnologija | 1539 (919) | Klemen86 |
» | c napaka .c:4:1: error: expected identifier or '(' before '{' tokenOddelek: Programiranje | 1928 (1501) | MrStein |
» | Začetniški problem pri klicanju funkcijOddelek: Programiranje | 955 (797) | Vesoljc |
» | "Problem" pri POSTanju ?Oddelek: Slo-Tech | 1736 (1304) | Tody |
» | Nec 3520a in regijaOddelek: Strojna oprema | 1142 (1043) | Quikee |