Mundarija:

OpenCV yordamida Pythonda ranglarni aniqlash: 8 qadam
OpenCV yordamida Pythonda ranglarni aniqlash: 8 qadam

Video: OpenCV yordamida Pythonda ranglarni aniqlash: 8 qadam

Video: OpenCV yordamida Pythonda ranglarni aniqlash: 8 qadam
Video: AI. Opencv loyiha 4. Rangni aniqlash 2024, Iyul
Anonim
Image
Image

Salom! Bu ko'rsatma, OpenCV kutubxonasi yordamida python tasviridan ma'lum bir rangni ajratish bo'yicha qo'llanma uchun ishlatiladi. Agar siz bu texnikani yangi bilgan bo'lsangiz, xavotir olmang, ushbu qo'llanmaning oxirida siz o'zingizning rang aniqlash dasturini dasturlashingiz mumkin bo'ladi.

Quyidagi funktsiyalar yoki biz siz o'rganadigan texnikani ayta olamiz, 1. Tasvirni qanday o'qish kerak

2. Track barlar qanday yaratiladi

3. Ranglar, to'yinganlik va tasvirning qiymatini yo'l chiziqlari yordamida qanday sozlash mumkin

4. Va keyin sizning yakuniy natijangiz bo'ladi

Siz quyida men qo'shgan chiqish videosini ko'rishingiz mumkin.

Shunday qilib, boshlaylik

Ta'minotlar

  • Python 3
  • openCV kutubxonasi
  • noaniq kutubxona

1 -qadam: kutubxonalarni import qilish

Kutubxonalarni import qilish
Kutubxonalarni import qilish

Rasm sariq Ferrari -da ko'rsatilganidek, biz tasvirdan faqat sariq rangni ajratib olishni dasturlashtiramiz

Birinchi qadam kutubxonalarimizni import qilish bo'ladi

1. OpenCV kutubxonasini o'z ichiga oladi. Pythonda u cv2 deb nomlanadi

2. Numpy kutubxonasini np sifatida kiritish. "As" bizga np kabi numpy qilishimizga imkon beradi, shuning uchun numpyni qayta -qayta yozishning hojati yo'q

2 -qadam: Track barlarini yaratish

Track barlarini yaratish
Track barlarini yaratish

Yo'l chiziqlari tasvirdagi rang, to'yinganlik va qiymat qiymatini sozlash uchun yaratilgan.

cv2.namedWindow ("TrackBars") Ushbu kod qatori yangi chiqish oynasini yaratish uchun ishlatiladi va oynaning nomi TrackBars sifatida berilgan (Siz xohlagan nomni berishingiz mumkin)

cv2.resizeWindow ("TrackBars", 600, 250) Bu funksiya oynaning o'lchamini o'zgartirish uchun ishlatiladi. "TrackBars" - bu qaysi oynaning o'lchamini o'zgartirmoqchisiz, chunki men TrackBars oynasining o'lchamini o'zgartirmoqchi edim, men bu nomni yozganman. Undan keyin ikkita butun son. Bu ikkita butun son - balandlik va kenglik. O'lchamni o'zgartirish uchun siz ikkita raqam bilan o'ynashingiz mumkin

3 -qadam: Rang, to'yinganlik va qiymat uchun TrackBars yaratish

Rang, to'yinganlik va qiymat uchun TrackBars yaratish
Rang, to'yinganlik va qiymat uchun TrackBars yaratish
Rang, to'yinganlik va qiymat uchun TrackBars yaratish
Rang, to'yinganlik va qiymat uchun TrackBars yaratish

Endi biz rang, to'yinganlik va qiymat uchun jami 6 ta TrackBars yaratamiz. Har birida ikkita, ya'ni minimal 1 va maksimal 1 bo'ladi. Biz openCV -ning createTrackbar funktsiyasidan foydalanamiz. Avval bu funksiyaning sintaksisini ko'rib chiqamiz.

cv2.createTrackbar ("WINDOWNAME", "MAINWINDOWNAME", "RANGE"). Bu chalkash bo'lishi mumkin, lekin xavotir olmang, biz har qadamni bosib o'tamiz. Shuni yodda tutingki, ochiq CVda tus 179, to'yinganlik 255 va qiymat 255 ga teng.

1. Minimal rang uchun TrackBar yaratish:

cv2.createTrackbar ("Hue min", "TrackBars", 0, 179, bo'sh)

Hue min-bu treklar nomi, TrackBars-asosiy oyna, 0-bizning slayderimiz joylashadigan joy va 179-silindr 0-179 oralig'ida harakatlanishini bildiradi.

2. Hue max uchun TrackBar yaratish:

cv2.createTrackbar ("Hue max", "TrackBars", 179, 179, bo'sh)

Bu Hue max-da izlar paneli nomi, TrackBars-asosiy oyna, 179-bizning slayderimiz joylashadigan joy va 179-maksimal diapazon, silindr 179-0 dan siljishini bildiradi.

3. Xuddi shunday, rasmda ko'rsatilganidek, min, sat max, val min va val max uchun qadamlarni takrorlang

Oq fonli tasvir - bu chiqish tasviri. Sizning treklaringiz shunday ko'rinadi

4 -qadam: Rasmni qanday o'qish va hajmini o'zgartirish

Rasmni qanday o'qish va hajmini o'zgartirish
Rasmni qanday o'qish va hajmini o'zgartirish

cv2.imread () tasvirni o'qishga imkon beradi. Shuni yodda tutish kerakki, sizning rasmingiz joylashuvi dastur saqlanadigan papkada bo'lishi kerak. Biz while loopini kiritamiz, chunki u tasvirni o'qib bo'lguncha yoki shart to'g'ri kelguncha aytishimiz kerak

img = cv2.imread ("ferrari.jpg")

  • Bunda men tasvirni saqlaydigan "img" o'zgarmaydigan nomini yaratdim
  • Cv2.imread ichida ikki tirnoq ichida kengaytmasi bo'lgan tasvir nomini yozing

Rasm hajmini o'zgartirish uchun biz cv2.resize funktsiyasidan foydalanamiz. Bu qism ixtiyoriy, agar siz o'lchamini o'zgartirmoqchi bo'lsangiz, bu funksiyadan foydalanishingiz mumkin

Cv2.resize ichida avval tasvir saqlanadigan o'zgaruvchining nomini, so'ngra kengligi va balandligini yozing

5 -qadam: Rasmga tatbiq etish uchun treklar qiymatini o'qish

Rasmga tatbiq qilish uchun trekka qiymatlarini o'qish
Rasmga tatbiq qilish uchun trekka qiymatlarini o'qish
Rasmga tatbiq qilish uchun trekka qiymatlarini o'qish
Rasmga tatbiq qilish uchun trekka qiymatlarini o'qish

Xo'sh, endi biz chiziqlar paneli qiymatlarini o'qiymiz, shuning uchun biz uni rasmimizga qo'llashimiz mumkin. Biz qiymatlarni cv2.getTrackbarPos () funktsiyasi yordamida olamiz.

Shu qismdan boshlaylik …

h_min = cv2.getTrackbarPos ("Hue min", "TrackBars")

Yuqoridagi bayonotda men h_min o'zgarmaydigan nomini yarataman, unda men Hue min qiymatini saqlayman. Shunday qilib, cv2.getTrackbarPos 1 -argumenti "Hue min" bo'ladi, chunki men hue min qiymatlarini xohlayman (imlo, createTrackbar funksiyasi bilan bir xil bo'lishi kerak) va 2 -argument u tegishli bo'lgan iz paneli oynasining nomi bo'ladi.

  • Yuqoridagi rasmda ko'rsatilgandek h_max va qolgan funktsiyalar uchun xuddi shu jarayonni takrorlang va keyin print () yordamida barcha qiymatlarni chop eting.
  • Chiqish ikkinchi rasmda ko'rsatilgan. Bu h_min, h_max, s_min, s_max, v_min, s_max qiymatlarini chop etadi.

6 -qadam: Tasvirni ko'rsatish va yuqori va pastki chegarani o'rnatish

Rasmni ko'rsatish va yuqori va pastki chegarani o'rnatish
Rasmni ko'rsatish va yuqori va pastki chegarani o'rnatish

Endi biz rang, to'yinganlik va qiymatning minimal va maksimal qiymatiga egamiz, biz bu qiymatni tasvirni filtrlash uchun ishlatamiz, shunda biz tasvirning o'ziga xos rangini chiqaramiz.

Buning uchun niqobni cv2.inRange funktsiyasidan foydalanib yaratamiz. Va bundan oldin biz rang, to'yinganlik va qiymatning yuqori va pastki chegaralarini o'rnatamiz

Shunday qilib, "pastroq" o'zgarmaydigan nomini yarating va numpy qator funktsiyasidan foydalanib, har 3 uchun min oralig'ini quyidagicha o'rnating

pastroq = np.array ([h_min, s_min, v_min])

Xuddi shu qadamni yuqori qism uchun takrorlang

yuqori = np.array ([h_max, s_max, v_max])

Endi biz quyidagi tarzda niqob yaratamiz

mask = cv2.inRange (o'lchamini, pastki, yuqori) ichida cv2.inRang ichida 1 -argument mening oxirgi rasmim saqlanadigan o'zgaruvchi bo'ladi, 2 -argument pastki chegara, 3 -argument esa yuqori chegara bo'ladi.

Endi biz asosiy tasvir va niqobni ko'rsatamiz. Ko'rsatish uchun biz cv2.imshow () funktsiyasidan foydalanamiz

cv2.imshow ("img", hajmini o'zgartirish) Bu asosiy tasvirni ko'rsatish uchun. 1 -argument - bu siz xohlagan ismni berishingiz mumkin bo'lgan oynaning nomi, 2 -argument - bu mening asosiy rasmim saqlanadigan o'zgaruvchan, siz ko'rsatmoqchi bo'lgan.

Xuddi shunday niqob uchun amallarni takrorlang

cv2.imshow ("Chiqish", niqob)

7 -qadam: Endi oxirgi qadam

Endi oxirgi qadam
Endi oxirgi qadam

Oxirgi bosqichda biz mashinaning rangini ajratib ko'rsatamiz.

Men o'zgaruvchining nomi natijasini yaratdim. Yana siz xohlagan ismingizni berishingiz mumkin. Shunday qilib, biz cv2.bitwise_and () funktsiyasidan foydalanamiz, bunda biz rasmlarni birgalikda qo'shamiz va yangi tasvir yaratamiz. Ikkala tasvirdagi piksellar qaerda bo'lsa ham, buni ha yoki "1" deb qabul qiladi.

natija = cv2.bitwise_and (o'lchamini o'zgartirish, hajmini o'zgartirish, niqob = niqob)

  • Bunda birinchi dalil bizning imidjimiz bo'ladi
  • Ikkinchi dalil ham bizning asl qiyofamiz bo'ladi, lekin undan keyin biz yaratgan niqob qo'llaniladi
  • Va nihoyat, natijani imshow funktsiyasidan foydalanib ko'rsatish

Bu oxirgi qadamni nusxa ko'chiring, bu shunchaki kechikish va siz klaviaturadagi "a" tugmachasini bosib chiqish oynasidan chiqishingiz mumkin

8 -qadam: Yakuniy natijalar

Tavsiya: