Mundarija:

OpenCV asosiy loyihalari: 5 qadam
OpenCV asosiy loyihalari: 5 qadam

Video: OpenCV asosiy loyihalari: 5 qadam

Video: OpenCV asosiy loyihalari: 5 qadam
Video: Lesson 28: Car-6 SunFounder self Driving Arduino car using | Robojax 2024, Noyabr
Anonim
OpenCV asosiy loyihalari
OpenCV asosiy loyihalari

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

FaceDetect funktsiyasi
FaceDetect funktsiyasi
FaceDetect funktsiyasi
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

Fonni o'chirish funktsiyasi
Fonni o'chirish funktsiyasi
Fonni o'chirish funktsiyasi
Fonni o'chirish funktsiyasi

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

VideoEdges funktsiyasi
VideoEdges funktsiyasi
VideoEdges funktsiyasi
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

VideoBlur funktsiyasi
VideoBlur funktsiyasi
VideoBlur funktsiyasi
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: