opencv_highgui – oddiy UI, tasvirlar va videoni yuklash/saqlash;
opencv_ml – mashinali o‘qitish usullari va modellari (SVM, qaror qabul qilish va h.k.);
opencv_features2d – turli identifikatorlar (SURF).
opencv_video – ob’ekt xarakatini tahlil qilish va kuzatish (optik oqim, xarakat andozasi, fonni yo‘qotish);
opencv_objdetect – tasvirda ob’ektlarni topish (Xaar veyvleti, HOG va h.k.);
opencv_calib3d – kamera kalibrovkasi, stereo-moslikni izlash va uch o‘lchovli ma’lumotlarni qayta ishlash elementlari;
opencv_flann – yaqin qo‘shnilarni tezkor izlash kutubxonasi (FLANN);
opencv_gpu – OpenCV ning ba’zi funksiyalarini CUDA (NVidia) hisobiga tezlatish.
2. OpenCVda ko‘p foydalaniladigan funksiyalar
Tasvirlarni qayta ishlash va namoyish qilish uchun OpenCV da maxsus tiplar mavjud bo‘lib, asosan IplImage va Mat tiplaridan ko‘p foydalaniladi. Quyida ko‘rib chiqiladigan funksiyalar asosan ana shu tipli tasvirlarni qayta ishlashga mo‘ljallangan. Funksiyalarni kichik-kichik dastur namunalari negizida ko‘rib chiqamiz.
Masalan, 620 qator va 440 ta ustundan iborat 8 bitli, 3 kanalli IplImage hamda Mat tipli tasvirlarni yaratish uchun quyidagi funksiyalardan foydalanamiz:
int height =620; // tasvir bo‘yi
int width =440; // tasvir eni
IplImage* tasvir = cvCreateImage(cvSize(height, width),8,3); // IplImage tiplitasvir nomli tasvirni yaratish
Mat matritsa(Size(height, width), CV_8UC3); // Mat tiplimatritsa nomli tasvirni yaratish
Tasvirni qora rang bilan bo‘yash quyidagicha:
cvSet(tasvir,cvScalar(0,0,0));
Quyida esa, diskdan tasvir faylini xotiraga yuklash va ekranda namoyish qilish uchun kichik dasturni ko‘ramiz:
IplImage* img = cvLoadImage(“c:\\tasvir.jpg”); // Diskdan tasvirni img ga o‘qish
cvNamedWindow( “Example1”, CV_WINDOW_AUTOSIZE ); // Example1 namoyish oynasini yaratish
cvShowImage( “Example1”, img ); // namoyish oynasiga img tasvirni yuklash va ko‘rsatish
cvWaitKey(0); // kutib turish
cvReleaseImage( &img ); // img tasvirni xotiradan o‘chirish
cvDestroyWindow( “Example1” ); // Example1 namoyish oynasini xotiradan o‘chirish
Tasvirni bir necha ma’lumotlarii bilan namoyish qilish dasturi quyida berilgan:
#include
#include
#include
#include
IplImage* image =0;
IplImage* src =0;
int main(int argc,char* argv[])
{
// tasvir nomi birinchi parametr bilan berilmoqda
char* filename = argc ==2? argv[1]:"Image0.jpg";
// tasvirani olamiz
image = cvLoadImage(filename,1);
// tasvirni klonlaymiz (nusxalaymiz)
src = cvCloneImage(image);
printf("[i] image: %s\n", filename);
assert( src !=0);
// tasvirni namoyish qilish uchun oyna
cvNamedWindow("original",CV_WINDOW_AUTOSIZE);
// tasvirni ko‘rsatamiz
cvShowImage("original",image);
// tasvir to‘g‘risidagi axborotlarni (konsol oynasida) chiqaramiz
printf("[i] channels: %d\n", image->nChannels );
printf("[i] pixel depth: %d bits\n", image->depth );
printf("[i] width: %d pixels\n", image->width );
printf("[i] height: %d pixels\n", image->height );
printf("[i] image size: %d bytes\n", image->imageSize );
printf("[i] width step: %d bytes\n", image->widthStep );
// tugma bosilishini kutamiz
cvWaitKey(0);
// resurslarni bo‘shatamiz
cvReleaseImage(& image);
cvReleaseImage(&src);
// oynani щchiramiz
cvDestroyWindow("original");
return0;
}
Natija quyidagicha (4.1-rasm.) bo‘ladi:
4.1-rasm. Tasvirni ma’lumotlari bilan namoyish qilish.
Keyingi dastur video-faylni namoyish qilish (ovozsiz, har bir kadrni ketma-ket ko‘rsatish) uchun xizmat qiladi:
cvNamedWindow( “Example2”, CV_WINDOW_AUTOSIZE ); // “Example2”namoyish oynasini yaratish
CvCapture* capture = cvCreateFileCapture(“d:\\video.avi”); // videofaylni xotiraga yuklash
IplImage* frame; // tasvir uchun xotiradan joy ajratish
while(1) { // tugallanmas takrorlash jarayonini boshlash (sikl boshi)
frame = cvQueryFrame( capture ); // videodan bitta kadrni (tasvirni) olish
if( !frame ) break; // agar tasvirni ololmasa, sikldan chiqib ketish
cvShowImage( “Example2”, frame ); // bitta kadrni (tasvirani) namoyish qilish
char c = cvWaitKey(33); // 33 sekund kutib turish (kadrlar orasidagi vaqt)
if( c == 27 ) break; // agar Esc bosilsa, chiqib ketish
} // sikl oxiri
cvReleaseCapture( &capture ); // videoni xotiradan tozalash
cvDestroyWindow( “Example2” );//Example2 namoyish oynasini xotiradan o‘chirish
4.2-rasm. OpenCVda videofaylni namoyish qilish.
Quyidagi funksiya esa, tasvirni Gaussli tekislash (filtrlash) uchun xizmat qiladi:
cvSmooth( image, out, CV_GAUSSIAN, 3, 3 ); // image kiruvchi tasvir 3×3 oyna o‘lchamida filtrlanadi
// va natija tasvir out ga beriladi.
Quyidagi dastur yordamida dastlabki tasvirni (4.3-rasm) hamda uni 7×7 oyna o‘lchamida filtrlab (4.4-rasm) namoyish qilinadi:
IplImage* img = cvLoadImage("c:\\car\\2.jpeg");
cvShowImage("Kiruvchi tasvir", img);
IplImage* out = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
cvSmooth( img, out, CV_GAUSSIAN, 7, 7 );
cvShowImage("Gauss filtrli tasvir", out);
cvWaitKey();
4.3-rasm. Dastlabki tasvir.
4.4-rasm. 7×7 Gauss filtri qo‘llangandan so‘ng.
SHu o‘rinda OpenCV ning oddiy ma’lumotlar tiplari to‘g‘risida qisqacha to‘xtalamiz.
|