Mündəricat:

OpenCV istifadə edərək sadə rəng algılama: 6 addım
OpenCV istifadə edərək sadə rəng algılama: 6 addım

Video: OpenCV istifadə edərək sadə rəng algılama: 6 addım

Video: OpenCV istifadə edərək sadə rəng algılama: 6 addım
Video: Lesson 101: Using IR Remote to control TV, AC Bulb with Relay, DC Motor and Servo Motor 2024, Noyabr
Anonim
OpenCV istifadə edərək sadə rəng algılama
OpenCV istifadə edərək sadə rəng algılama

Salam! Bu gün OpenCV və python istifadə edərək canlı videodan bir rəng aşkar etməyin sadə bir üsulunu göstərəcəyəm.

Əsasən, lazım olan rəngin arxa planda olub olmadığını yoxlayacağam və OpenCV modullarından istifadə edərək həmin bölgəni maskalayacağam və eyni zamanda çərçivəni göstərəcəyəm.

Addım 1: Başlıq Dosyaları

Başlıq faylları
Başlıq faylları

İndi burada cv2 və NumPy adlı iki başlıq faylından istifadə etdim. Əsasən cv2, kodlardakı əmrlərdən istifadə edərkən vacib olan bütün c ++ fayllarını yükləyən OpenCV kitabxanasıdır (bütün tərifləri ehtiva edir).

Və Numpy, çoxölçülü bir sıra saxlamaq üçün vacib olan bir python kitabxanasıdır. Rəng aralığımızın koordinatlarını saxlamaq üçün istifadə edəcəyik.

Və np kimi numpy, kodumuzun hər dəfə numpy əvəzinə np istifadə edərək bir qədər qısalmasına kömək edir.

Addım 2: Videonun çəkilməsi

Videonun çəkilməsi
Videonun çəkilməsi

Python istifadə edərkən bu olduqca sadədir. Burada çərçivələri yazmağa başlaya bilməsi üçün sadəcə video yazıcını işə salmalıyıq.

İndi VideoCapture içindəki dəyər kameranı göstərir, mənim vəziyyətimdə kamera dizüstü kompüterimə bağlıdır, buna görə 0.

İkinci kameraya bənzər şəkildə 1 -ə gedə bilərsiniz və s. VideoCapture bunun üçün obyekt yaradır.

Addım 3: Çərçivə çəkmək və Rəng müəyyən etmək

Çərçivə çəkmək və rəng təyin etmək
Çərçivə çəkmək və rəng təyin etmək

İndi burada bir şey etməliyik ki, videonun ani çərçivəsini çəkə bilək ki, bu da görüntünü çıxarmağa kömək edəcək və tələbə uyğun olaraq işləyə bilərik.

"while" döngüsü, döngəni tələb olunan vaxta çatdırmağımıza kömək edəcək. İndi "_, frame = cap.read ()" Çərçivənin tutulduğunu yoxlamaq və saxlamaq üçün istifadə olunur. "cap.read () bir boolean dəyişəndir və çərçivə düzgün oxunduqda və heç bir çərçivə almadığınızda heç bir səhv göstərməyincə doğru olaraq qaytarılır, sadəcə heç birini alacaqsınız.

İndi 11 və 12 -ci sətirlər əsasən aşkar etməyimiz lazım olan rəng aralığını təyin edir. Bunun üçün mavi rəngdən istifadə etmişəm.

Bunun üçün hər hansı bir rəngə davam edə bilərsiniz, yalnız o rəng üçün BGR dəyərlərini yazmalısınız. Həqiqi dünyada müəyyən bir rəngin aşkarlanması məqsədimizə xidmət etməyəcəyi üçün numpy dizilərindən istifadə edərək iki sıra təyin etmək daha yaxşıdır, əksinə bir sıra mavi rənglər təyin edəcəyik ki, bu diapazonda algılar.

Bunun üçün aşağı BGR və yuxarı BGR dəyərlərini saxlayan iki dəyişən təyin etdim.

Addım 4: Maska və çıxarma

Maska və çıxarma
Maska və çıxarma

İndi burada çərçivəni maskalamaq və çərçivənin rəngini çıxarmaq əsas vəzifəsi gəlir. Maskeleme etmək üçün OpenCV kitabxanasında olan əvvəlcədən təyin edilmiş əmrlərdən istifadə etdim. Əsasən maskeleme, çərçivənin bir hissəsinin çıxarılması prosesidir, yəni BGR rəngləri müəyyən rəng aralığında olmayan və bu cv2.inRange tərəfindən edilən pikselləri siləcəyik. Daha sonra, piksel dəyərlərindən asılı olaraq maskalı görüntüyə rəng aralığını tətbiq edirik və bunun üçün cv2.bitwise_and istifadə edəcəyik, maskaları və rəng aralığının dəyərlərindən asılı olaraq rəngləri maskalı bölgəyə təyin edəcək.

Cv2 üçün keçid. bitwise_and:

Addım 5: Nəhayət göstərilir

Nəhayət göstərilir!
Nəhayət göstərilir!

Burada hər bir çərçivəni görüntü olaraq göstərmək üçün əsas cv2.imshow () istifadə etdim. Çərçivə məlumatlarını dəyişənlərdə saxladığım üçün onları imshow () da əldə edə bilərəm. Burada orijinal, maskalı və rəngli üç çərçivənin hamısını nümayiş etdirdim.

İndi while döngəsindən çıxmalıyıq. Bunun üçün sadəcə cv2.wait. Key () tətbiq edə bilərik. Əsasən cavab vermədən əvvəl gözləmə müddətini bildirir. 0 -dan keçsəniz, sonsuza qədər gözləyər və 0xFF, arxitekturanın 64 bit olduğunu bildirir. "ord ()", basıldığında if blokunda if əmrini yerinə yetirəcəyini və döngədən çıxacağını ifadə edir.

Sonra cap.release () video yazıcısını və cv2.destroyAllWindows () bütün açılan pəncərələri bağlayır.

Hər hansı bir probleminiz varsa, mənə bildirin.

Mənbə koduna keçid:

Tövsiyə: