Opencv tasvirni aniqlash. Python va OpenCV yordamida tasvirlar bo'yicha kitoblarni qidirish uchun skript yozish

Xo'sh, asosan siz kashf qilishingiz kerak doiralar... cvHoughCircles () ni ko'rganmisiz? Bundan foydalanishga ruxsatingiz bormi?

Ushbu sahifada OpenCV yordamida narsalarni aniqlash bo'yicha yaxshi ma'lumotlar mavjud. Sizni 2.5-bo'lim qiziqtirishi mumkin.

Bu men ushbu rasmdagi tangalarni topish uchun yozgan kichik demo. Umid qilamanki, siz kodning bir qismini o'zingizning foydangiz uchun ishlatishingiz mumkin.

Kirish :

Chiqishlar :

// kompilyatsiya qilingan: g ++ circles.cpp -o circles `pkg-config --cflags --libs opencv` #include #o'z ichiga oladi #o'z ichiga oladi #o'z ichiga oladi int main (int argc, char ** argv) (IplImage * img = NULL; agar ((img = cvLoadImage (argv)) == 0) (printf ("cvLoadImage muvaffaqiyatsiz \ n");) IplImage * kulrang = cvCreateImage ( cvGetSize (img), IPL_DEPTH_8U, 1); CvMemStorage * saqlash = cvCreateMemStorage (0); cvCvtColor (img, kulrang, CV_BGR2GRAY); // Bu noto'g'ri doiralar aniqlanmasligi uchun amalga oshiriladi cvSmooth (kulrang, ANVSI) , 7, 7); IplImage * jonli = cvCreateImage (cvGetSize (img), IPL_DEPTH_8U, 1); IplImage * rgbcanny = cvCreateImage (cvGetSize (img), IPL_DEPTH_8Can, 3); *HCvCv 3 donalik; , CV_HOUGH_GRADIENT, 1, kulrang-> balandlik / 3, 250, 100); cvCvtColor (canny, rgbcanny, CV_GRAY2BGR); uchun (size_t i = 0; i)< circles->jami; i ++) (// floatlarni int floatga aylantiring * p = (float *) cvGetSeqElem (doiralar, i); cv :: nuqta markazi (cvRound (p), cvRound (p)); int radius = cvRound ( p) ; // aylana markazini chizish cvCircle (rgbcanny, center, 3, CV_RGB (0,255,0), -1, 8, 0); // cvCircle doira konturini chizish (rgbcanny, markaz, radius + 1, CV_RGB ( 0, 0,255), 2, 8, 0); printf ("x:% dy:% dr:% d \ n", center.x, center.y, radius);) cvNamedWindow ("doiralar", 1); cvShowImage ("doiralar", rgbcanny); cvSaveImage ("out.png", rgbcanny); cvWaitKey (0); qaytish 0; )

Doiralarni aniqlash cvHoughCircles () parametrlariga juda bog'liq. E'tibor bering, men ushbu demoda Canny-dan ham foydalanganman.

Men OpenCV yordamida ob'ekt detektorini (bu holda to'p) kodlashim kerak. Muammo shundaki, har bir Google qidiruvi menga YUZ ANGILASH bilan nimadir qaytaradi. Shuning uchun menga qaerdan boshlash, nimadan foydalanish va hokazolar haqida yordam kerak.

Ba'zi ma'lumotlar:

  • To'pning qat'iy rangi yo'q, ehtimol u oq bo'ladi, lekin u o'zgarishi mumkin.
  • Men mashinani o'rganishdan foydalanishim kerak, bu murakkab va mustahkam bo'lishi shart emas, KNNning taklifi (bu oddiyroq va osonroq).
  • Barcha izlanishlarimdan so'ng, men faqat to'plar uchun namunalar gistogrammasini hisoblash va uning ML ni o'rganish foydali bo'lishi mumkinligini aniqladim, ammo bu erda mening asosiy tashvishim shundaki, to'pning o'lchami o'zgarishi mumkin va o'zgaradi (kameradan yaqinroq va uzoqroq) va men Men uchun MLni qanday tasniflashni bilmayman, demoqchiman. natija.
  • Noto'g'ri fon bo'lishi mumkin, masalan, odamlar, to'pning orqasida mato va boshqalar.
  • Aytganimdek, men ML algoritmidan foydalanishim kerak, ya'ni Haar yoki Viola algoritmlari yo'q.
  • Bundan tashqari, men Canny "ed tasviridagi doiralarni topish uchun yo'llardan foydalanish haqida o'ylardim, faqat KNN treningi uchun yo'lni ma'lumotlar qatoriga aylantirish yo'lini topish kerak edi.

    Xo'sh, ... takliflar?

    Oldindan rahmat. ;)

Ushbu maqola sizga OpenCV yordamida rasmdagi kitoblar sonini hisoblash uchun Python skriptini qanday yaratishni ko'rsatib beradi.

Nima qilamiz?

Keling, kitoblarni qidiradigan rasmni ko'rib chiqaylik:

Tasvirda to‘rtta kitob, shuningdek, chalg‘ituvchi kofe, Starbucks chashkasi, bir nechta magnit va bir parcha konfet kabi narsalarni ko‘rishimiz mumkin.

Bizning maqsadimiz, boshqa hech qanday narsani kitob sifatida aniqlamasdan, tasvirdagi to'rtta kitobni topishdir.

Bizga qanday kutubxonalar kerak?

Rasmlar bo'yicha kitoblarni qidirish va ochish tizimini yozish uchun biz kompyuterni ko'rish va tasvirni qayta ishlash uchun OpenCV dan foydalanamiz. To'g'ri ishlashi uchun OpenCV uchun NumPy-ni ham o'rnatishimiz kerak. Ushbu kutubxonalar o'rnatilganligiga ishonch hosil qiling!

Python va OpenCV yordamida tasvirlar bo'yicha kitoblarni qidirish

Taxminan tarjima. Siz bizning maqolamizdagi manba kodi asl nusxadagi koddan farq qilishini sezishingiz mumkin. Muallif, ehtimol, omborlar orqali kerakli kutubxonalarni o'rnatishdan foydalangan. Biz pip dan foydalanishni taklif qilamiz, bu ancha oson. Xatolarga yo'l qo'ymaslik uchun maqolamizda keltirilgan kod versiyasidan foydalanishni tavsiya etamiz.

Sevimli kod muharririni oching, find_books.py nomli yangi fayl yarating va boshlang:

# - * - kodlash: utf-8 - * - # import zarur paketlar numpy import sifatida np import cv2 # tasvir yuklash, rangni kulrang rangga o'zgartirish va tasvirni keskinlashtirish = cv2.imread ("misol.jpg") kulrang = cv2. cvtColor (rasm, cv2.COLOR_BGR2GRAY) kulrang = cv2.GaussianBlur (kulrang, (3, 3), 0) cv2.imwrite ("gray.jpg", kulrang)

Keling, OpenCV kutubxonasini import qilishdan boshlaylik. Diskdan tasvirni yuklash cv2.imread funksiyasi orqali amalga oshiriladi. Bu erda biz uni faqat diskdan yuklaymiz va keyin rangli gamutni RGB dan kul rangga aylantiramiz.

Yuqori chastotali shovqinni kamaytirish va ilovamizning aniqligini oshirish uchun biz tasvirni biroz xiralashtiramiz. Kodni bajargandan so'ng, rasm quyidagicha ko'rinishi kerak:

Biz diskdan tasvirni yukladik, uni kulrang rangga aylantirdik va biroz xiralashtirdik.

Keling, rasmdagi ob'ektlarning qirralarini (ya'ni konturlarini) aniqlaymiz:

# chekka aniqlash qirrali = cv2.Canny (kulrang, 10, 250) cv2.imwrite ("edged.jpg", qirrali)

Endi bizning rasmimiz quyidagicha ko'rinadi:

Biz tasvirlardagi ob'ektlarning konturlarini topdik. Biroq, ko'rib turganingizdek, ba'zi yo'llar yopiq emas - yo'llar orasida bo'shliqlar mavjud. Rasmning oq piksellari orasidagi bo'shliqlarni olib tashlash uchun biz "yopish" operatsiyasidan foydalanamiz:

# yopish yadrosini yaratish va qo'llash = cv2.getStructuringElement (cv2.MORPH_RECT, (7, 7)) yopiq = cv2.morphologyEx (qirrali, cv2.MORPH_CLOSE, yadro) cv2.imwrite ("yopiq.jpg", yopiq)

Endi konturlardagi bo'shliqlar yopildi:

Keyingi qadam, rasmdagi ob'ektlarning konturlarini aniq aniqlashdir. Buning uchun cv2.findContours funksiyasidan foydalanamiz:

# rasmdagi konturlarni toping va kitoblar sonini hisoblang cnts = cv2.findContours (yopiq.copy (), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) jami = 0

Kitobning geometriyasini ko'rib chiqing.

Kitob to'rtburchak. To'rtburchakning to'rtta uchi bor. Shuning uchun, agar biz konturni ko'rib chiqsak va uning to'rtta uchi borligini aniqlasak, bu tasvirdagi boshqa ob'ekt emas, balki kitob deb taxmin qilishimiz mumkin.

Yo'l kitob yoki yo'qligini tekshirish uchun biz har bir yo'lni aylanib o'tishimiz kerak:

# konturlar bo'ylab cnts uchun pastadir: # konturni taxminiy (silliq) peri = cv2.arcLength (c, True) taxminan = cv2.approxPolyDP (c, 0,02 * peri, True) # agar konturda 4 ta cho'qqi bo'lsa, biz agar len (taxminan) == 4 bo'lsa: cv2.drawContours (rasm,, -1, (0, 255, 0), 4) jami + = 1 bo'lsa, uni kitob deb hisoblaymiz

Har bir yo'l uchun biz cv2.arcLength yordamida perimetrni hisoblaymiz va keyin cv2.approxPolyDP yordamida yo'lni taxminiy (silliq) qilamiz.

Yo'lni yaqinlashtirishimizning sababi shundaki, u mukammal to'rtburchak bo'lmasligi mumkin. Suratdagi shovqin va soyalar tufayli kitobning roppa-rosa 4 ta cho‘qqisi bo‘lishi dargumon. Konturni yaqinlashtirib, biz bu muammoni hal qilamiz.

Nihoyat, biz taxmin qilinadigan konturning haqiqatan ham to'rtta uchi borligini tekshiramiz. Agar shunday bo'lsa, biz kitob atrofida kontur chizamiz va keyin kitoblarning umumiy soni uchun hisoblagichni oshiramiz.

Keling, olingan rasm va topilgan kitoblar sonini ko'rsatish orqali ushbu misolni yakunlaymiz:

# olingan rasmni chop etishni ko'rsatish ("Men bu rasmda (0) kitob topdim" .format (jami) cv2.imwrite ("output.jpg", rasm))

Ushbu bosqichda bizning rasmimiz quyidagicha ko'rinadi:

Keling, xulosa qilaylik

Ushbu maqolada siz Python va OpenCV bilan oddiy tasvirni qayta ishlash va kompyuterni ko'rish texnikasidan foydalangan holda tasvirlardagi kitoblarni qanday topishni o'rgandingiz.

Bizning yondashuvimiz quyidagilar edi:

  1. Diskdan rasmni yuklang va uni kulrang rangga aylantiring.
  2. Tasvirni biroz xiralashtiring.
  3. Tasvirdagi narsalarni aniqlash uchun Canny chekka detektorini qo'llang.
  4. Yo'llardagi bo'shliqlarni yoping.
  5. Rasmdagi ob'ektlarning konturlarini toping.
  6. Kontur to'rtburchak va shuning uchun kitob bo'lganligini aniqlash uchun konturga yaqinlashishni qo'llang.

Siz ushbu maqolada ishlatiladigan skriptning manba kodini va tasvirni yuklab olishingiz mumkin.

Ochiq manbali kompyuterni ko'rish va mashinani o'rganish kutubxonasi. U 2500 dan ortiq algoritmlarni o'z ichiga oladi, ular kompyuterni ko'rish va mashinani o'rganish uchun klassik va zamonaviy algoritmlarni o'z ichiga oladi. Ushbu kutubxona turli tillarda interfeyslarga ega, ular orasida Python (biz ushbu maqolada foydalanamiz), Java, C++ va Matlab.

O'rnatish

Windows uchun o'rnatish ko'rsatmalarini ko'rish mumkin, va Linux uchun -.

Tasvirni import qilish va ko'rish

import cv2 image = cv2.imread ("./ path / to / image.extension") cv2.imshow ("Rasm", rasm) cv2.waitKey (0) cv2.destroyAllWindows ()

Eslatma Yuqoridagi usulni o'qiyotganda tasvir rang oralig'ida RGB emas (hamma o'rganib qolganidek), BGR. Boshida bu unchalik muhim bo'lmasligi mumkin, lekin rang bilan ishlashni boshlaganingizdan so'ng, bu xususiyat haqida bilishga arziydi. 2 ta yechim mavjud:

  1. 1-kanalni (R - qizil) 3-kanal (B - ko'k) bilan almashtiring, keyin qizil rang (255,0,0) emas, balki (0,0,255) bo'ladi.
  2. Rang maydonini RGB ga o'zgartiring: rgb_image = cv2.cvtColor (rasm, cv2.COLOR_BGR2RGB)

    Va keyin kodda endi rasm bilan emas, balki rgb_image bilan ishlash uchun.

Eslatma Tasvir ko'rsatilgan oynani yopish uchun istalgan tugmani bosing. Agar siz oynani yopish tugmasidan foydalansangiz, muzlash holatlariga duch kelishingiz mumkin.

Maqolada tasvirlarni ko'rsatish uchun quyidagi kod ishlatiladi:

Import cv2 def viewImage (tasvir, oynaning_nomi): cv2.namedWindow (oyna_nomi, cv2.WINDOW_NORMAL) cv2.imshow (oyna_nomi, rasm) cv2.waitKey (0) cv2.destroyAllWindows ()

Kesish

Kesishdan keyin it

Import cv2 kesilgan = image viewImage (qirqib olingan, "Kesilgandan keyin it")

Tasvir bu erda.

Hajmi o'zgarishi

Oʻlchamini 20% ga oʻzgartirgandan soʻng

Import cv2 scale_percent = 20 # Asl o'lchamning foizi kengligi = int (img.shape * scale_foiz / 100) balandlik = int (img.shape * scale_foiz / 100) xira = (kenglik, balandlik) o'lchami = cv2.resize (img, dim) , interpolatsiya = cv2.INTER_AREA) viewImage (oʻlchami oʻzgartirildi, “Oʻlchami 20% ga oʻzgartirilgandan keyin”)

Bu funksiya asl tasvirning tomonlar nisbatini hisobga oladi. Tasvir hajmini o'zgartirishning boshqa funktsiyalarini ko'rish mumkin.

Buriling

180 daraja burilishdan keyin it

Import cv2 (h, w, d) = image.shape center = (w // 2, h // 2) M = cv2.getRotationMatrix2D (markaz, 180, 1.0) aylantirildi = cv2.warpAffine (rasm, M, (w) , h)) viewImage (aylantirilgan, "180 daraja aylanishdan keyin it")

image.shape balandlik, kenglik va kanallarni qaytaradi. M - Rotation Matrix - tasvirni markaz atrofida 180 daraja aylantiradi. -ve - tasvirning soat yo'nalishi bo'yicha aylanishi, + ve esa mos ravishda soat miliga teskari.

Kulrang va oq-qora chegara

Kulrang doggi

Qora va oq it

Import cv2 gray_image = cv2.cvtColor (tasvir, cv2.COLOR_BGR2GRAY) ret, threshold_image = cv2.threshold (im, 127, 255, 0) viewImage (gray_image, "Grayscale doggie") viewholdImage "va "BGR2GRAY")

gray_image tasvirning bitta kanalli versiyasidir.

Eshik funktsiyasi tasvirni qaytaradi, unda quyuqroq (127 dan kichik) bo'lgan barcha piksellar 0 ga, yorqinroq (katta) 127 dan katta bo'lgan barcha piksellar 255 ga almashtiriladi.

Aniqlik uchun yana bir misol:

Ret, pol = cv2.threshold (im, 150, 200, 10)

Bu erda 150 dan quyuqroq bo'lgan hamma narsa 10 ga, yorqinroq bo'lgan hamma narsa 200 ga almashtiriladi.

Qolgan chegara funktsiyalari tasvirlangan.

Xiralashtirish / antialiasing

Xira it

Import cv2 blurred = cv2.GaussianBlur (rasm, (51, 51), 0) viewImage (loyqa, “Blurred doggie”)

GaussianBlur funksiyasi 3 ta parametrni oladi:

  1. Asl rasm.
  2. 2 ta musbat toq sonlar majmuasi. Raqamlar qanchalik baland bo'lsa, silliqlashning kuchi shunchalik katta bo'ladi.
  3. sigmaX va sigmaY... Agar ushbu parametrlar 0 ga teng qoldirilsa, ularning qiymati avtomatik ravishda hisoblanadi.

To'rtburchaklar chizish

Itning yuziga to'rtburchaklar chizing

Import cv2 chiqishi = image.copy () cv2.rectangle (chiqish, (2600, 800), (4100, 2400), (0, 255, 255), 10) viewImage (chiqish, "Itning yuziga toʻrtburchak chizish" )

Bu funksiya 5 ta parametrni oladi:

  1. Tasvirning o'zi.
  2. Yuqori chap burchak koordinatasi (x1, y1).
  3. Pastki o'ng burchak koordinatasi (x2, y2).
  4. To'rtburchaklar rangi (tanlangan rang modeliga qarab GBR / RGB).
  5. To'rtburchakning chiziq kengligi.

Chiziq chizish

Chiziq bilan ajratilgan 2 it

Import cv2 chiqishi = image.copy () cv2.line (chiqish, (60, 20), (400, 200), (0, 0, 255), 5) viewImage (chiqish, "chiziq bilan ajratilgan 2 ta it")

Chiziq funksiyasi 5 ta parametrni oladi:

  1. Chiziq chizilgan haqiqiy tasvir.
  2. Birinchi nuqtaning koordinatasi (x1, y1).
  3. Ikkinchi nuqtaning koordinatasi (x2, y2).
  4. Chiziq rangi (tanlangan rang modeliga qarab GBR / RGB).
  5. Chiziq kengligi.

Rasmdagi matn

Matn bilan rasm

Import cv2 chiqishi = image.copy () cv2.putText (chiqish, "Biz<3 Dogs", (1500, 3600),cv2.FONT_HERSHEY_SIMPLEX, 15, (30, 105, 210), 40) viewImage(output, "Изображение с текстом")

putText funksiyasi 7 ta parametrni oladi:

  1. To'g'ridan-to'g'ri tasvir.
  2. Rasm uchun matn.
  3. Matn boshining pastki chap burchagining koordinatasi (x, y).
  4. Aniqlangan yuzlar: 2

    Import cv2 image_path = "./path/to/photo.extension" face_cascade = cv2.CascadeClassifier ("haarcascade_frontalface_default.xml") rasm = cv2.imread (image_path) kulrang = cv2.cvtColor (tasvir, cv2.GR_MOL. , scaleFactor = 1.1, minNeighbors = 5, minSize = (10, 10)) faces_detected = "Yuzlar aniqlandi:" + format (len (yuzlar)) chop etish (faces_detected) # (x, y, w, h) uchun yuzlar atrofida kvadratchalar chizish ) yuzlarda: cv2.rectangle (rasm, (x, y), (x + w, y + h), (255, 255, 0), 2) viewImage (rasm, yuzlar_aniqlangan)

    detectMultiScale ikkala yuz va ob'ektlarni tanib olish uchun umumiy funktsiyadir. Funktsiya yuzlarni maxsus qidirishi uchun biz unga tegishli kaskadni o'tkazamiz.

    detectMultiScale funksiyasi 4 ta parametrni oladi:

    1. Kulrang shkalada qayta ishlangan rasm.
    2. ScaleFactor parametri. Ba'zi yuzlar boshqalarga qaraganda kattaroq bo'lishi mumkin, chunki ular boshqalarga qaraganda yaqinroqdir. Ushbu parametr istiqbolni qoplaydi.
    3. Tanib olish algoritmi ob'ektni tanib olish vaqtida toymasin oynadan foydalanadi. minNeighbors parametri yuz atrofidagi ob'ektlar sonini aniqlaydi. Ya'ni, bu parametrning qiymati qanchalik katta bo'lsa, algoritm joriy ob'ektni yuz sifatida belgilashi uchun shuncha ko'p o'xshash ob'ektlarni talab qiladi. Juda kichik qiymat noto'g'ri musbatlar sonini oshiradi va juda katta bo'lsa, algoritm yanada talabchan bo'ladi.
    4. minSize - bu maydonlarning haqiqiy hajmi.

    Konturlar - ob'ektni tanib olish

    Ob'ektni aniqlash tasvirning rang segmentatsiyasi yordamida amalga oshiriladi. Buning uchun ikkita funksiya mavjud: cv2.findContours va cv2.drawContours.

    Ushbu maqola rang segmentatsiyasi yordamida ob'ektni aniqlash haqida batafsil ma'lumot beradi. U uchun kerak bo'lgan hamma narsa u erda.

    Rasmni saqlash

    import cv2 image = cv2.imread ("./ import / path.extension") cv2.imwrite ("./ eksport / path.extension", rasm)

    Xulosa

    OpenCV 3D renderlash, ilgʻor tasvir va videolarni tahrirlash, videodagi obʼyektlar va odamlarni kuzatish va aniqlash, toʻplamdan bir xil tasvirlarni topish va boshqa koʻp narsalarda qoʻllanilishi mumkin boʻlgan engil algoritmlarga ega ajoyib kutubxonadir.

    Ushbu kutubxona tasvirlar sohasida mashinani o'rganish bilan bog'liq loyihalarni ishlab chiqayotgan har bir kishi uchun juda muhimdir.

Robot uchun tashqi dunyo haqidagi eng muhim ma'lumot manbalari uning optik sensorlari va kameralaridir. Rasmni olgandan so'ng, vaziyatni tahlil qilish yoki qaror qabul qilish uchun uni qayta ishlash kerak. Avval aytganimdek, kompyuter ko'rish tasvirlar bilan ishlashning ko'plab usullarini birlashtiradi. Robotning ishlashi davomida kameralardan olingan video ma'lumotlar boshqaruvchida ishlaydigan biron bir dastur tomonidan qayta ishlanadi deb taxmin qilinadi. Noldan kod yozmaslik uchun siz tayyor dasturiy echimlardan foydalanishingiz mumkin. Hozirgi vaqtda ko'plab tayyor kompyuter ko'rish kutubxonalari mavjud:

  • Matrox tasvirlash kutubxonasi
  • Camellia kutubxonasi
  • eVision-ni oching
  • HALCON
  • libCVD
  • Opencv
  • va hokazo…
SDK ma'lumotlari funksionallik, litsenziyalash shartlari va foydalaniladigan dasturlash tillarida katta farq qilishi mumkin. Biz toʻxtalib oʻtamiz Opencv... U ta'lim maqsadlarida ham, tijorat maqsadlarida ham bepul. U optimallashtirilgan C / C ++ tilida yozilgan, C, C ++, Python, Java interfeyslarini qo'llab-quvvatlaydi va 2500 dan ortiq algoritmlarni o'z ichiga oladi. Tasvirni qayta ishlashning standart funksiyalaridan tashqari (filtrlash, xiralashtirish, geometrik o‘zgartirishlar va h.k.) ushbu SDK yanada murakkab vazifalarni hal qilishga imkon beradi, ular orasida fotosuratdagi obyektni aniqlash va uni “tanib olish” kiradi. Aniqlash va tanib olish vazifalari butunlay boshqacha bo'lishi mumkinligini tushunish kerak:
  • ma'lum bir ob'ektni qidirish va tanib olish;
  • bir xil toifadagi ob'ektlarni qidirish (tanib olmasdan),
  • faqat ob'ektni aniqlash (u bilan tayyor tasvir).
Rasmdagi xususiyatlarni aniqlash va moslikni tekshirish uchun OpenCV quyidagi usullarga ega:
  • Oriented Gradients gistogrammasi (HOG) - piyodalarni aniqlash uchun ishlatilishi mumkin
  • Viola-Jones algoritmi - yuzlarni topish uchun ishlatiladi
  • SIFT (Scale Invariant Feature Transform) funksiyasini aniqlash algoritmi
  • SURF (Speeded Up Robust Features) funksiyasini aniqlash algoritmi
Masalan, SIFT ob'ektni aniqlash uchun ishlatilishi mumkin bo'lgan nuqtalar to'plamini aniqlaydi. Yuqoridagi usullardan tashqari, OpenCV aniqlash va tanib olish uchun boshqa algoritmlarga, shuningdek, k-eng yaqin qo'shnilar, neyron tarmoqlar, qo'llab-quvvatlovchi vektorli mashinalar va boshqalar kabi mashinalarni o'rganish bilan bog'liq algoritmlar to'plamiga ega. Umuman olganda, OpenCV kompyuterni ko'rish muammolarining aksariyat qismini hal qilish uchun etarli vositalar to'plami. Agar algoritm SDK ga kiritilmagan bo'lsa, unda, qoida tariqasida, uni muammosiz dasturlash mumkin. Bundan tashqari, OpenCV asosida foydalanuvchilar tomonidan yozilgan algoritmlarning ko'plab mualliflik versiyalari mavjud. Shuni ham ta'kidlash kerakki, so'nggi yillarda OpenCV ancha kengaydi va biroz "og'ir vaznli" bo'lib qoldi. Shu munosabat bilan turli ishqibozlar guruhlari OpenCV asosida “engil” kutubxonalar yaratmoqda. Misollar: SimpleCV, liuliu ccv, tinycv ... Foydali saytlar
  1. http://opencv.org/ - Loyihaning asosiy sayti
  2. http://opencv.willowgarage.com/wiki/ - Eski versiyalar uchun hujjatlarga ega eski loyiha sayti