Mundarija:
- Ta'minotlar
- 1 -qadam: FaceDetect funktsiyasi
- 2 -qadam: BackgroundRemove funksiyasi
- 3 -qadam: VideoEdges funktsiyasi
- 4 -qadam: VideoBlur funktsiyasi
- 5 -qadam: yaxshilanishlar
Video: OpenCV asosiy loyihalari: 5 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:24
Ushbu loyihada biz OpenCV -ning asosiy funksiyalarini jonli video oqimini o'z ichiga olgan 4 ta oddiy loyiha orqali o'rganamiz. Bu yuzni tanib olish, fonni olib tashlash, qirralarning maxsus vizual ko'rsatilishi va jonli video oqimiga xiralashtirish effektini qo'llash. Bu loyihalarni sinab ko'rishdan asosiy maqsadim - OpenCV interfeysi yordamida oyog'imni namlash edi, chunki men kompyuterni ko'rish sohasida chuqurroq o'rganishni rejalashtirganman.
Ta'minotlar
- Python bilan ishlaydigan kompyuter
- CV kutubxonasini, Numpy kutubxonasini, tkinter kutubxonasini, sys kutubxonasini oching
- Kompyuterga ulanish uchun kamera (agar kompyuterda hali mavjud bo'lmasa)
- Dasturning python fayli (bu ko'rsatmaga kiritilgan)
- haarcascade xml fayli (ushbu ko'rsatmaga kiritilgan)
1 -qadam: FaceDetect funktsiyasi
Bu funksiya sizning kamerangizdagi videoni har qanday yuzida yashil kvadratchalar bilan ko'rsatadi. Kodda biz cv2. VideoCapture () funktsiyasidan foydalanib, biz tasvirga olayotgan videoni "ta'qib qilish" nomli ob'ektda saqlaymiz. CAPTURE_INDEX - bu kompyuter tomonidan o'rnatilgan raqam, bu kompyuterning video kiritish ro'yxatidagi kamerangiz indeksiga to'g'ri keladi. Agar kompyuterga tashqi kamera ulanmagan bo'lsa, 0 yoki 1 ishlashi kerak.
Face_cascade obyekti cascadeClassifier funktsiyasi va OpenCV github -da topilgan "haarcascade_frontalface_default.xml" fayli yordamida ishga tushiriladi. Biz bu ob'ektni "yuzlar" ro'yxatida aniqlangan yuzlarni x koordinat, y koordinata, kenglik va balandlikni ushlab turuvchi to'rt tomonlama birikma sifatida saqlash uchun ishlatamiz. Keyin cv2.rectangle funktsiyasidan foydalanib, yuzni mukammal yopadigan to'rtburchakni chizamiz
Ushbu videodan OpenCV "catch.read" () yordamida va "img" deb nomlangan ramkada saqlagan holda, ko'p vaqtli tasvirni tasvirga oladi. Keyin har bir tasvir biz xohlagan tarzda talqin qilinadi va o'zgartiriladi. FaceDetect uchun biz cvtColor funksiyasi yordamida tasvirni kul rangga aylantiramiz, u birinchi parametrda berilgan tasvirni ikkinchi parametrda ko'rsatilgan tasvir rangining ma'lum bir turiga o'zgartiradi. Ikkinchi parametr uchun maqbul qiymatlar ro'yxatini Internetda topish mumkin. Keyin biz tasvirni "Yuzni aniqlash" nomli oynada ko'rsatamiz, bu imshow () funktsiyasidan foydalanib, deraza nomi va tasvir ramkasi uchun qatorni oladi.
Nihoyat, foydalanuvchining cv2.waitKey () funksiyasi yordamida q tugmachasini kiritishini kutamiz. 0xFF niqobi 64 bitli kompyuterlar uchun shart sifatida ishlatiladi. Foydalanuvchi video oqimini tugatgandan so'ng, faceDetect funksiyasi tortishish ob'ektini bo'shatadi va OpenCV interfeysi ostida ochilgan boshqa oynalarni yo'q qiladi. Boshqa barcha funktsiyalar shunga o'xshash dizaynga ega.
2 -qadam: BackgroundRemove funksiyasi
Bu funksiya videomizning orqa qismini olib tashlashga va faqat oldingi rasmni qoldirishga harakat qiladi. Bu ba'zi kameralarda ishlamasligi mumkin, chunki ular yorug'likni sozlash funktsiyasidan foydalanadi, u turli ob'ektlar/ fokuslar ramkaga kirganda faollashadi. Agar backgroundRemove funksiyasi ishlamasa, xafa bo'lmang- bu sizning kamerangiz bo'lishi mumkin!
Bu funksiyadan foydalanish uchun kamera ramkasidan uzoqlashing va "d" tugmachasini bosib fon tasvirini oling. Orqa fonda siz suratga olmoqchi bo'lgan harakatlanuvchi narsalar bo'lmasligi muhim. Keyin, biz kamera ramkasiga qaytishimiz mumkin. Agar funksiya ishlagan bo'lsa, foydalanuvchi o'zini faqat funksiyaning video oqimida ko'rishi kerak. Old tasvirdagi har qanday shovqin/qora pufakchalar kameraning yoritilishini sozlash natijasida bo'lishi mumkin. Boshqa fonni olish uchun "r" tugmachasini qayta ishga tushiring, so'ng "d" ni yana bosing.
Bu funktsiyani bajarishning ba'zi asosiy usullari-bu "d" tugmachasini bosgan paytda ko'tariladigan "bayroq" booleanidan foydalanish. Bu fonni oladi va uni funksiya orqali uzatiladigan videodan olib tashlashga imkon beradi. Biz fon tasvirini ref_img -da saqlashni maqsad qilib qo'ydik, shuning uchun uni har qanday harakatlanuvchi ob'ektni oladigan oldingi rasmdan ajratishimiz mumkin. Biz cv2.subtract () funktsiyasidan foydalanib, oldingi tasvirni fon tasviridan olib tashlaymiz va aksincha, keyin ikkita rasmdagi kichik farqlarni darhol bekor qilamiz. Fon qorong'i.
Fgmask bu ikkita tasvir orasidagi farq yordamida qilingan va keyin OpenCV cv2.bitwise_and () funksiyasi yordamida video oqim funksiyalariga qo'llaniladi.
3 -qadam: VideoEdges funktsiyasi
Bu funksiya bizning jonli video oqimimizni qaytaradi, lekin aniqlanadigan qirralar oq rangga bo'yalgan, qolganlari esa qora rangda. Bu funktsiyani boshqa funktsiyalardan ajratib turadigan narsa- bu bizning asl videomizni RBG formatidan HSV-ga o'zgartirish, bu rang, to'yinganlik va o'zgarishni anglatadi- bu videodan yorug'lik va rangni qayta ishlashning boshqa usuli. Bu usul yordamida biz filtr yordamida (red_low dan red_highgacha) videodagi konturlarni osonroq ajratishimiz mumkin.
Canny Edge Detection tasvirning qirralarini aniqlash uchun ishlatiladi. U kulrang o'lchovli tasvirni kirish sifatida qabul qiladi va ko'p bosqichli algoritmdan foydalanadi.
4 -qadam: VideoBlur funktsiyasi
Bu funksiya video oqimimizga noaniq effekt qo'shish uchun ishlatiladi. Oddiy funktsiya bizning ramkamizdagi GaussianBlur cv2 funktsiyasini chaqiradi. GaussianBlur funktsiyasi haqida qo'shimcha ma'lumotni bu erda topishingiz mumkin:
opencv-python-tutroals.readthedocs.io/en/l…
5 -qadam: yaxshilanishlar
Bu loyihadagi eng sezgir funksiya - fonni o'chirish funktsiyasi, chunki u yorug'likni sozlash funksiyasi bo'lmagan kameradan foydalanishni talab qiladi. OpenCV kutubxonasida bu yoritishni sozlashi va fonni silliq olib tashlashi mumkin bo'lgan yaxshiroq funktsiyalar to'plami bo'lishi mumkin (yashil ekranga o'xshash).
Biz, shuningdek, (x, y) koordinatalarini qaytarishdan boshqa funktsional imkoniyatlarga ega ob'ektlarni ishlab chiqaradigan boshqa yuzni aniqlash funktsiyalaridan ham foydalanishimiz mumkin edi. Ehtimol, yuzlarni eslab qolish qobiliyatiga ega bo'lgan yuzni aniqlash dasturini amalga oshirish juda qiyin bo'lmaydi.
Xiralashtirish funktsiyasini foydalanuvchi tomonidan intuitiv boshqarish orqali ko'proq sozlash mumkin. Masalan, foydalanuvchi xiralashtirish effektining qizg'inligini sozlashi yoki loyqa qilish uchun kadr ichidagi ma'lum bir maydonni tanlashi mumkin.
Tavsiya:
Ilmiy loyiha uchun Arduino yordamida RADARni qanday qilish kerak - Eng yaxshi Arduino loyihalari: 5 qadam
Ilmiy loyiha uchun Arduino yordamida RADARni qanday qilish kerak | Arduino -ning eng yaxshi loyihalari: Salom do'stlar, men sizga ko'rsatma beraman, arduino nano yordamida yaratilgan ajoyib radar tizimini yaratish, bu loyiha ilmiy loyihalar uchun juda mos keladi va agar siz sovrinni yutib olish juda yaxshi bo'lsa, uni juda kam sarmoya va imkoniyat bilan osonlikcha qilishingiz mumkin.
Arduino loyihalari uchun ajoyib noutbuk sensorli panel! 18 qadam (rasmlar bilan)
Arduino loyihalari uchun ajoyib noutbuk sensorli panelini buzish!: Bir muncha vaqt oldin, men Arduino mikrokontrolerli PS/2 sensorli panelini o'ylab topganimda, uning ikkita ulanishini raqamli kirish sifatida ishlatish mumkinligini bilib oldim. Ushbu yo'riqnomada keling, PS/2 sensorli panelini qanday ishlatishni bilib olaylik
Mikrokontroller loyihalari uchun o'rtacha ish vaqti: 6 qadam
Sizning mikrokontroler loyihalaringiz uchun o'rtacha ish haqi: Men bu ko'rsatmada men ishlaydigan o'rtacha nima ekanligini va nima uchun unga g'amxo'rlik qilish kerakligini tushuntirib beraman, shuningdek, maksimal hisoblash samaradorligi uchun uni qanday amalga oshirish kerakligini ko'rsataman (murakkablik haqida qayg'urmang, bu tushunish juda oson va
16x16 RGB LED panelli Arduino loyihalari: 5 qadam (rasmlar bilan)
16x16 RGB LED panelli Arduino loyihalari: Hammaga salom, men bu loyihani joylashtiryapman, chunki men har bir kishi 16x16 RGB o'lchamdagi ajoyib LED panellaridan biri bilan o'ynash uchun oddiy joyga ega bo'lishini xohlayman. Men boshqa loyihalardan g'oyalarni oldim va ularni ushbu loyiha uchun o'zgartirdim. Bu sizga beradi
Robotika: Rover 5 -ning asosiy versiyasi, robotning asosiy bosqichi: 18 qadam (rasmlar bilan)
Robotika: Rover 5 -ning eng yaxshi robotlari: