Tasvirlar bo'yicha asosiy operatsiyalar
Maqsadlar
• Piksel qiymatlariga kiring va ularni o'zgartiring
• Tasvir xususiyatlariga kirish
• Tasvirning mintaqasini (ROI) belgilash
• Tasvirlarni bo'lish va birlashtirish
Ushbu bo'limda deyarli barcha operatsiyalar asosan OpenCV emas, balki Numpy bilan bog'liq. OpenCV bilan yaxshiroq optimallashtirilgan kodni yozish uchun Numpy haqida yaxshi ma'lumot talab qilinadi.
(Misollar Python terminalida ko'rsatiladi, chunki ularning aksariyati faqat bitta qatorli kodlar)
Piksel qiymatlariga kirish va o'zgartirish
Avval rangli rasmni yuklaylik:
Piksel qiymatiga uning qatori va ustun koordinatalari orqali kirishingiz mumkin. BGR tasviri uchun u ko'k, yashil, qizil ranglar qatorini qaytaradi. Kul rangdagi rasm uchun mos keladigan intensivlik qaytariladi.
Piksel qiymatlarini xuddi shunday o'zgartirishingiz mumkin.
Ogohlantirish: Numpy bu tez qatorlarni hisoblash uchun optimallashtirilgan kutubxona. Shunday qilib, har bir piksel qiymatiga kirish va uni o'zgartirish juda sekin bo'ladi va u tushkunlikka tushadi.
Rasm xususiyatlariga kirish
Tasvir xususiyatlariga qatorlar, ustunlar va kanallar soni, rasm ma'lumotlari turi, piksellar soni va boshqalar kiradi. Rasm shakliga img.shape orqali kirish mumkin. U satrlar, ustunlar va kanallar sonining ketma-ketligini qaytaradi (agar rasm rang bo'lsa):
Umumiy piksellar sonini img.size orqali ko'rish mumkin:
Tasvirning ma'lumotlar turi img.dtype tomonidan olinadi:
Roy surati
Ba'zan, muayyan mintaqadagi tasvirlar bilan o'ynashga to'g'ri keladi. Tasvirlarda ko'zni aniqlash uchun, avval yuzni topgunga qadar tasvirni yuzni aniqlashni amalga oshiring, so'ngra yuzni qidirib qidirib ko'ring. Ushbu yondashuv aniqlikni yaxshilaydi (chunki ko'zlar doimo yuzlardadir: D) va ishlash (chunki biz kichik joy qidiramiz).
ROI yana Numpy indeksatsiya yordamida olinadi. Mana men to'pni tanlayapman va uni rasmdagi boshqa mintaqaga ko'chirmoqdaman:
Quyidagi natijalarni tekshiring:
Tasvir kanallarini ajratish va birlashtirish
Tasvirning B, G, R kanallari kerak bo'lganda ularning shaxsiy tekisliklariga bo'linishi mumkin. Keyin, alohida kanallar yana birlashtirilib, BGR tasvirini yana hosil qiladi. Buni quyidagilar bajarishi mumkin:
Yoki
Aytaylik, siz barcha qizil piksellarni nolga aylantirmoqchisiz, siz bunday bo'linmasligingiz va uni nolga teng qo'yishingiz shart emas. Siz shunchaki tezroq bo'lgan Numpy indeksatsiyadan foydalanishingiz mumkin.
Tasvirlar uchun chegaralar o'rnatish (to'ldirish)
Agar siz foto ramka kabi biror narsa atrofida chegara yaratmoqchi bo'lsangiz, siz cv2.copyMakeBorder () funktsiyasidan foydalanishingiz mumkin. Ammo bu yig'ish jarayoni, nol to'ldirish va hokazolar uchun ko'proq dasturlarga ega. Bu funktsiya quyidagi dalillarni oladi:
• src- kiritish tasvir
• tegishli yo'nalishlar bo'yicha piksel sonida yuqori, pastki, chap va o'ng chegara kengligi
• chegara tipidagi bayroqcha qo'shildi. Quyidagi yo'nalishlar:
- cv2.BORDER_CONSTANT - Doimiy rangli chegaralarni qo'shadi. Qiymat keyingi dalil sifatida berilishi kerak.
- cv2.BORDER_REFLECT - Chegara chegara elementlarining qaytarilish oynasi bo'ladi, masalan: fedcba | abcdefgh | hgfedcb
- cv2.BORDER_REFLECT_101 yoki cv2.BORDER_DEFAULT - Yuqoridagi kabi, lekin biroz o'zgarishi bilan, masalan: gfedcb | abcdefgh | gfedcba
- cv2.BORDER_REPLICATE - Oxirgi element quyidagicha takrorlanadi: aaaaaa | abcdefgh | hhhhhh
- cv2.BORDER_WRAP- Tushuna olmayman, u quyidagicha bo'ladi: cdefgh | abcdefgh | abcdefg
value - chegara turi cv2 bo'lsa chegara rangi. BORDER_CONSTANT
Tushunish uchun quyida barcha chegara turlarini namoyish etuvchi namunaviy kod keltirilgan:
Quyidagi natijani ko'ring. (Rasm matplotlib bilan namoyish qilinadi. Shunday qilib, RED va BLUE samolyotlari o'zaro almashinadi):
Do'stlaringiz bilan baham: |