Mundarija:

OpenCV yordamida oddiy rangni aniqlash: 6 qadam
OpenCV yordamida oddiy rangni aniqlash: 6 qadam

Video: OpenCV yordamida oddiy rangni aniqlash: 6 qadam

Video: OpenCV yordamida oddiy rangni aniqlash: 6 qadam
Video: AI. Opencv loyiha 4. Rangni aniqlash 2024, Iyun
Anonim
OpenCV yordamida oddiy rangni aniqlash
OpenCV yordamida oddiy rangni aniqlash

Salom! Bugun men OpenCV va python yordamida jonli videodan rangni aniqlashning oddiy usulini ko'rsatmoqchiman.

Asosan, men kerakli rangning fon ramkasida mavjudligini tekshiraman, lekin OpenCV modullari yordamida men bu hududni niqoblayman va bir vaqtning o'zida ramkani ko'rsataman.

1 -qadam: Sarlavha fayllari

Sarlavha fayllari
Sarlavha fayllari

Endi bu erda men ikkita sarlavha faylini ishlatdim, ya'ni cv2 va NumPy. Asosan, cv2 - bu OpenCV kutubxonasi bo'lib, u kodlardagi buyruqlardan foydalanganda muhim bo'lgan barcha c ++ fayllarini yuklaydi (unda barcha ta'riflar mavjud).

Va Numpy - bu ko'p o'lchovli massivni saqlash uchun zarur bo'lgan python kutubxonasi. Biz ranglar oralig'ining koordinatalarini saqlash uchun foydalanamiz.

Va numpy sifatida np asosan kodimizni har safar numpy o'rniga np yordamida biroz qisqartirishga yordam beradi.

2 -qadam: videoni yozib olish

Videoni yozib olish
Videoni yozib olish

Python -dan foydalanganda bu juda oddiy. Bu erda biz faqat videoregistratorni yoqishimiz kerak, shunda u kadrlarni yozishni boshlashi mumkin.

Endi VideoCapture ichidagi qiymat kamerani ko'rsatadi, menimcha, kamera noutbukga ulangan, shuning uchun 0.

Ikkilamchi kamera uchun ham xuddi shunday 1 ga o'tishingiz mumkin. VideoCapture buning uchun ob'ektni yaratadi.

3 -qadam: Rasmni olish va rangni aniqlash

Rasmni aniqlash va rangni aniqlash
Rasmni aniqlash va rangni aniqlash

Endi biz bu erda biror narsa qilishimiz kerak, shunda biz videoni tez suratga olishimiz mumkin, bu bizga tasvirni chiqarishga yordam beradi va biz talabga binoan ishlay olamiz.

"while" tsikli bizga kerakli vaqtni tanlashga yordam beradi. Endi "_, frame = cap.read ()" ramkaning olinganligini tekshirish uchun ishlatiladi va uni saqlaydi. "cap.read () - bu mantiqiy o'zgaruvchidir va agar ramka to'g'ri o'qilgan bo'lsa, rostni qaytaradi va agar sizda hech qanday ramka bo'lmasa, u hech qanday xato ko'rsatmaydi, siz esa None ni olasiz.

Endi 11 va 12 -qatorlar asosan biz aniqlashimiz kerak bo'lgan rang oralig'ini belgilaydi. Buning uchun men ko'k rangga o'rganib qolganman.

Siz har qanday rangni tanlashingiz mumkin, faqat shu rang uchun BGR qiymatlarini kiriting. Haqiqiy dunyoda ma'lum bir rangni aniqlash bizning maqsadimizga xizmat qilmaydi, aksincha biz ko'k rang oralig'ini aniqlaymiz, shunda u diapazonda aniqlanadi.

Buning uchun men pastki BGR va yuqori BGR qiymatlarini saqlaydigan ikkita o'zgaruvchini aniqladim.

4 -qadam: Maskalash va ajratish

Maskalash va chiqarish
Maskalash va chiqarish

Endi bu erda ramkani maskalash va ramkaning rangini chiqarishning asosiy vazifasi keladi. Men maskalash uchun OpenCV kutubxonasida mavjud bo'lgan oldindan belgilangan buyruqlardan foydalandim. Asosan niqoblash - bu ramkaning bir qismini olib tashlash jarayoni, ya'ni biz BGR ranglari belgilangan rang oralig'ida bo'lmagan va bu cv2.inRange yordamida bajariladigan piksellarni olib tashlaymiz. Shundan so'ng, biz piksellar qiymatiga qarab niqoblangan tasvirga rang diapazonini qo'llaymiz va buning uchun biz cv2.bitwise_and dan foydalanamiz, u niqob va rang diapazonining qiymatiga qarab niqoblangan hududga ranglarni tayinlaydi.

Cv2 uchun havola. bitwise_and:

5 -qadam: Nihoyat ko'rsatiladi

Nihoyat ko'rsatiladi!
Nihoyat ko'rsatiladi!

Bu erda men har bir kadrni tasvir sifatida ko'rsatish uchun asosiy cv2.imshow () dan foydalanganman. O'zgaruvchilarda saqlangan ramka ma'lumotlari bo'lgani uchun ularni imshow () da olishim mumkin. Bu erda men uchta ramkani ko'rsatdim, asl, niqobli va rangli.

Endi biz loop tsiklidan chiqishimiz kerak. Buning uchun biz faqat cv2.wait. Key () ni amalga oshirishimiz mumkin. Asosan, javob berishdan oldin kutish vaqtini ko'rsatadi. Shunday qilib, agar siz 0dan o'tsangiz, u cheksiz kutadi va 0xFF arxitekturaning 64bit ekanligini aytadi. "ord ()" tugmachasi bosilganda if buyrug'ini bajaradi va u loopdan chiqadi.

Keyin cap.release () videoregistratorni yopadi va cv2.destroyAllWindows () barcha ochilgan oynalarni yopadi.

Agar sizda biron bir muammo bo'lsa, menga xabar bering.

Manba kodiga havola:

Tavsiya: