Additív színmodell: piros, zöld, kék keverése RGB hullámhossz:700nm, 546nm, 435nm Elektronikai eszközök alkalmazzák: kijelzők, kamerák 16 millió szín kódolható Szürke árnyalat: R=G=B OPENCV: BGR Mátrix típus: CV_8UC3 Pont típus: img.at<vec3b>(i, j) Tartomány: R, G, B [0, 255] Tartomány váltás: r, g, b [0, 1] rgb.convertto(norm_rgb, CV_32FC3, 1/255.0);
Töltsd le az alábbi képet: https://en.wikipedia.org/wiki/file:indian_hybrid_orange.jpg Készíts egy függvényt, ami a narancsokat egy másik képre másolja. void narancsmasolo( const cv::mat src, cv::mat& dest ); Emlékeztető Kép beolvasása: cv::imread( elérési_út, ImreadModes::IMREAD_COLOR ) Kép létrehozása: img.create( méret, típus ); Kép másolása (deep copy): img2 = img.clone(); Képpont elérése img.at<cv::vec3b>(sor, oszlop)[csatorna] csatorna: 0 - kék, 1 - zöld, 2 - piros
Hue (színezet) Piros 0 Sárga 60 Zöld 120 Kékeszöld 180 Kék 240 Bíbor 300 Saturation/Chroma (telítettség) Alap- és kiegészítőszínek telítettsége maximális Szürke telítettsége nulla Value ( max( R, G, B) ) 3 millió szín kódolható OpenCV Mátrix típus pl.: CV_8UC3 Pont típus: img.at<vec3b>(i, j) Tartomány: H [0, 179], S, V [0, 255] Áttérés BGR-ből HSV-be: cvtconvert( InputArray src, OutputArray dest, ColorConversionCodes::COLOR_BGR2HSV);
Töltsd le az alábbi képet: https://en.wikipedia.org/wiki/file:indian_hybrid_orange.jpg Készíts egy függvényt, ami a narancsokat egy másik képre másolja. void narancsmasolohsv( const cv::mat src, cv::mat& dest ); Emlékeztető Kép beolvasása: imread( elérési_út, ImreadModes::IMREAD_COLOR ) Kép létrehozása: img.create( méret, típus ); Áttérés HSV színtérbe: cvtconvert( InputArray src, OutputArray dest, ColorConversionCodes::COLOR_BGR2HSV); Kép másolása (deep copy): img2 = img.clone(); Képpont elérése img.at<cv::vec3b>(sor, oszlop)[csatorna] csatorna: 0 - kék, 1 - zöld, 2 - piros
Szétválik a színezet (a*,b*) és a világosság (L) Tartományok: L*: [0, 100] a*: zöld-vörös tengely: [-100, 100] b*: kék-sárga tengely: [-100, 100] Teljes színkülönbség: E = L 2 + a 2 + b 2 Színezet változás: H = E 2 L 2 C 2 Telítettség (chroma): C = a 2 + b 2 Színezeti szög számítása: h ab = arctg b a
Szétválik a színezet (a*,b*) és a világosság (L) Tartományok: L*: [0, 100] a*: zöld-vörös tengely: [-127, 127] b*: kék-sárga tengely: [-127, 127] Teljes színkülönbség: E = L 2 + a 2 + b 2 Színezet változás: H = E 2 L 2 C 2 Telítettség (chroma): C = a 2 + b 2 Színezeti szög számítása: h ab = arctg b a
OpenCV tartományok CV_8UC3-nál: L*: [0, 255] ( eredet_l* = opencv_l*100/255.0 ) a*: [0, 255] ( eredeti_a* = opencv_a* - 128 ) b*: [0, 255] ( eredeti_b* = opencv_b* - 128 ) Érdemes a CV_32FC3-at használni, ahol nincs átalakítás: cv::mat rgb = imread( ); //szokásos RGB kép (CV_8UC3) //RGB kép átskálázása ( [0, 1] tartományra ) cv::mat rgbf; rgb.convertto(rgbf, CV_32FC3, 1.0 / 255.0); //rgbf képet használjuk a színrendszer váltásnál. cv::mat lab(rgbf.size(), CV_32FC3); cv::cvtcolor(rgbf, lab, COLOR_BGR2Lab);
Készíts egy programot, ami: megjelenít egy kapott képet a felhasználó egérrel kiválaszthat egy pontot hatására egy másik képen megjelennek a kijelölt ponthoz hasonló színű pontok (RGB térben t távolságra lévő képpontok (t kezdeti értéke 15)) A felh. változtathassa a t távolságot a + és - gombok leütésével Kép felolvasása, megjelenítése Egér eseménykezelő hozzáadása (setmousecallback) int key = ' '; do{ ha volt esemény, eredménykép létrehozása és megjelenítése key = cv::waitkey(1); ha + v. - akkor adott tavolsag valtoztatasa }while (key!= 'q');
Eseménykezelő: void onmouse(int mevent, int x, int y, int flag, void* userdata){ esemény és/vagy állapot ellenőrzése szükséges adatok mentése az userdata változóba: pl. x, y } pl: if( mevent == EVENT_LBUTTONDBLCLK ) TO DO if( flag == EVENT_FLAG_LBUTTON ) TO DO Eseménykezelő felhasználása: userdata_tipusa adat; //pl: Vec3b, Point, saját struktúra imshow( ablak, kep ); setmousecallback( ablak, onmouse, &adat ); {várakoztatás vagy ciklus}
Egészítsd ki a fenti programot úgy, hogy a HSV színtér Hue csatornáját használja a kijelöléshez. Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség, akkor vond le a maximális értékből. Egészítsd ki a fenti programot CIE Lab színtérben történő kijelöléssel. Használd a teljes színkülönbséget
Képek (vagy azok eredetiének) származási helye: https://en.wikipedia.org/wiki/file:hsv_color_solid_cone_chrom a_gray.png http://www.texample.net/media/tikz/examples/pdf/cielab.pdf https://commons.wikimedia.org/wiki/file:lab_color_space.png