Სარჩევი:

მარტივი ფერის გამოვლენა OpenCV გამოყენებით: 6 ნაბიჯი
მარტივი ფერის გამოვლენა OpenCV გამოყენებით: 6 ნაბიჯი

ვიდეო: მარტივი ფერის გამოვლენა OpenCV გამოყენებით: 6 ნაბიჯი

ვიდეო: მარტივი ფერის გამოვლენა OpenCV გამოყენებით: 6 ნაბიჯი
ვიდეო: Leap Motion SDK 2024, ივნისი
Anonim
მარტივი ფერის გამოვლენა OpenCV გამოყენებით
მარტივი ფერის გამოვლენა OpenCV გამოყენებით

გამარჯობა! დღეს მე ვაპირებ ვაჩვენო მარტივი მეთოდი ფერადი ვიდეოდან, OpenCV და პითონის გამოყენებით.

ძირითადად, მე უბრალოდ შევამოწმებ საჭირო ფერს ფონის ჩარჩოში ყოფნა თუ არა და OpenCV მოდულების გამოყენებით მე შევამ mask ამ რეგიონს და ერთდროულად ვაჩვენებ ჩარჩოს.

ნაბიჯი 1: სათაურის ფაილები

სათაურის ფაილები
სათაურის ფაილები

ახლა აქ მე გამოვიყენე ორი სათაურის ფაილი, კერძოდ cv2 და NumPy. ძირითადად cv2 არის OpenCV ბიბლიოთეკა, რომელიც იტვირთება ყველა c ++ ფაილს, რაც მნიშვნელოვანია კოდებში ბრძანებების გამოყენებისას (ის შეიცავს ყველა განსაზღვრებას).

და Numpy არის პითონის ბიბლიოთეკა, რომელიც აუცილებელია მრავალგანზომილებიანი მასივის შესანახად. ჩვენ ვიყენებთ ჩვენი ფერის დიაპაზონის კოორდინატების შესანახად.

და numpy როგორც np ძირითადად ეხმარება ჩვენს კოდს ოდნავ შეამციროს np გამოყენებით numpy ნაცვლად ყოველ ჯერზე.

ნაბიჯი 2: ვიდეოს გადაღება

ვიდეოს გადაღება
ვიდეოს გადაღება

ეს საკმაოდ მარტივია პითონის გამოყენებისას. აქ ჩვენ უბრალოდ უნდა ჩავრთოთ ვიდეო ჩამწერი ისე, რომ მან დაიწყოს ჩარჩოების ჩაწერა.

ახლა VideoCapture– ის მნიშვნელობა მიუთითებს კამერაზე, ჩემს შემთხვევაში კამერა დაკავშირებულია ჩემს ლეპტოპთან, ასე რომ 0.

თქვენ შეგიძლიათ წადი 1 -ის მსგავსად მეორადი კამერისთვის და ასე შემდეგ. VideoCapture ქმნის ობიექტს მისთვის.

ნაბიჯი 3: ჩარჩოს აღება და ფერის განსაზღვრა

ჩარჩოს აღება და ფერის განსაზღვრა
ჩარჩოს აღება და ფერის განსაზღვრა

ახლა აქ ჩვენ უნდა გავაკეთოთ რაღაც ისე, რომ ჩვენ შეგვიძლია გადავიღოთ ვიდეოს მყისიერი ჩარჩო, რაც დაგვეხმარება სურათის ამოღებაში და ჩვენ შეგვიძლია ვიმუშაოთ ამაზე მოთხოვნის შესაბამისად.

"while" მარყუჟი დაგვეხმარება მარყუჟის გაშვებაში ჩვენი მოთხოვნის დროში. ახლა "_, frame = cap.read ()" გამოიყენება გადაღებული ჩარჩოს მოქმედების შესამოწმებლად და შესანახად. "cap.read () არის ლოგიკური ცვლადი და ბრუნდება true, თუ ჩარჩო სწორად არის წაკითხული და თუ არ მიიღებთ ჩარჩოებს ის არ აჩვენებს შეცდომას, თქვენ უბრალოდ მიიღებთ None.

ახლა მე -11 და მე -12 ხაზები ძირითადად განსაზღვრავს ფერის დიაპაზონს, რომელიც ჩვენ გვჭირდება. ამისათვის მე შევეჩვიე ლურჯ ფერს.

თქვენ შეგიძლიათ გააგრძელოთ ნებისმიერი ფერი, რისთვისაც თქვენ უნდა ჩაწეროთ BGR მნიშვნელობები ამ კონკრეტული ფერისთვის. უმჯობესია განვსაზღვროთ ორი მასივი numpy მასივების გამოყენებით, რადგან რეალურ სამყაროში კონკრეტული ფერის გამოვლენა არ ემსახურება ჩვენს მიზანს, არამედ ჩვენ განვსაზღვრავთ ცისფერი ფერის დიაპაზონს, რათა ის აღმოაჩინოს დიაპაზონში.

ამისათვის მე განვსაზღვრე ორი ცვლადი, რომელიც ინახავს ქვედა BGR და ზედა BGR მნიშვნელობებს.

ნაბიჯი 4: ნიღაბი და მოპოვება

ნიღაბი და მოპოვება
ნიღაბი და მოპოვება

ახლა აქ ჩნდება ჩარჩოს დაფარვის და ჩარჩოს ფერის ამოღების მთავარი ამოცანა. ნიღბის გასაკეთებლად გამოვიყენე ბიბლიოთეკაში არსებული წინასწარ განსაზღვრული ბრძანებები OpenCV– ში. ძირითადად შენიღბვა არის ჩარჩოს გარკვეული ნაწილის ამოღების პროცესი, ანუ ჩვენ ამოვიღებთ პიქსელებს, რომელთა ფერი BGR მნიშვნელობებია, რომლებიც არ არის განსაზღვრულ ფერის დიაპაზონში და ეს კეთდება cv2.inRange- ის მიერ. ამის შემდეგ, ჩვენ ვიყენებთ ფერის დიაპაზონს ნიღბიან გამოსახულებაზე, რაც დამოკიდებულია პიქსელის მნიშვნელობებზე და ამისათვის ჩვენ გამოვიყენებთ cv2.bitwise_and, ის უბრალოდ მიანიჭებს ფერებს ნიღბიან რეგიონს ნიღბის და ფერის დიაპაზონის მნიშვნელობების მიხედვით.

ბმული cv2– ისთვის. bitwise_and:

ნაბიჯი 5: საბოლოოდ ჩვენება

საბოლოოდ ჩვენება!
საბოლოოდ ჩვენება!

აქ მე გამოვიყენე ძირითადი cv2.imshow () თითოეული ჩარჩოს გამოსახულების გამოსახატავად. ვინაიდან მე მაქვს ცვლადებში შენახული ჩარჩო მონაცემები, შემიძლია მათი მოძიება imshow () - ში. აქ მე გამოვფინე სამივე ჩარჩო, ორიგინალური, ნიღბიანი და ფერადი.

ახლა ჩვენ უნდა გამოვიდეთ while მარყუჟიდან. ამისათვის ჩვენ შეგვიძლია უბრალოდ განვახორციელოთ cv2.wait. Key (). ძირითადად ის გვეუბნება ლოდინის დროს პასუხის გაცემამდე. ასე რომ, თუ თქვენ გადალახავთ 0 -ს, ის დაელოდება უსასრულოდ და 0xFF გეტყვით, რომ არქიტექტურა არის 64 ბიტიანი. "ord ()" განსაზღვრავს იმ სიმბოლოს, რომელიც დაჭერისას შეასრულებს break ბრძანებას if ბლოკში და ის გამოვა მარყუჟიდან.

შემდეგ cap.release () ხურავს ვიდეო ჩამწერს და cv2.destroyAllWindows () ხურავს ყველა გახსნილ ფანჯარას.

თუ თქვენ გაქვთ რაიმე პრობლემა, გთხოვთ შემატყობინოთ.

ბმული წყაროს კოდზე:

გირჩევთ: