Съдържание:

Просто откриване на цвят с помощта на OpenCV: 6 стъпки
Просто откриване на цвят с помощта на OpenCV: 6 стъпки

Видео: Просто откриване на цвят с помощта на OpenCV: 6 стъпки

Видео: Просто откриване на цвят с помощта на OpenCV: 6 стъпки
Видео: CS50 2014 - Week 7, continued 2024, Ноември
Anonim
Просто откриване на цвят с помощта на OpenCV
Просто откриване на цвят с помощта на OpenCV

Здравейте! Днес ще покажа прост метод за откриване на цвят от видео на живо с помощта на OpenCV и python.

По принцип просто ще тествам необходимия цвят, присъстващ във фоновата рамка или не, и с помощта на OpenCV модули ще маскирам този регион и едновременно с това показвам рамката.

Стъпка 1: Заглавните файлове

Заглавните файлове
Заглавните файлове

Сега тук използвах два заглавни файла, а именно cv2 и NumPy. По принцип cv2 е библиотеката на OpenCV, която зарежда всички c ++ файлове, които са важни, докато използвате командите в кодовете (тя съдържа всички дефиниции).

А Numpy е библиотека на python, която е от съществено значение за съхраняване на многоизмерен масив. Ще използваме за съхраняване на координатите на цветовата гама.

И numpy като np основно помага на нашия код да съкрати малко, като използва np всеки път вместо numpy.

Стъпка 2: Заснемане на видеоклипа

Заснемане на видеото
Заснемане на видеото

Това е доста просто, докато използвате python. Тук просто трябва да включим видеорекордера, за да може да започне да записва кадрите.

Сега стойността във 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 () затваря всички отворени прозорци.

Ако имате някакви проблеми, моля, уведомете ме.

Връзка към изходния код:

Препоръчано: