Мазмуну:

OpenCV менен жөнөкөй түстөрдү аныктоо: 6 кадам
OpenCV менен жөнөкөй түстөрдү аныктоо: 6 кадам

Video: OpenCV менен жөнөкөй түстөрдү аныктоо: 6 кадам

Video: OpenCV менен жөнөкөй түстөрдү аныктоо: 6 кадам
Video: MJC Stream: Видишь енота? А он есть! Главное об ML и компьютерном зрении 2024, Ноябрь
Anonim
OpenCVди колдонуу менен жөнөкөй түстөрдү аныктоо
OpenCVди колдонуу менен жөнөкөй түстөрдү аныктоо

Салам! Бүгүн мен OpenCV жана python аркылуу жандуу видеодон түстү аныктоонун жөнөкөй ыкмасын көрсөтөм.

Негизинен мен керектүү түстүн фондо бар же жок экенин текшерем жана OpenCV модулдарын колдонуп, мен ошол аймакты маска кылып, ошол эле учурда кадрды көрсөтөм.

1 -кадам: Header Files

Header Files
Header Files

Азыр бул жерде мен cv2 жана NumPy деген эки баш файлды колдондум. Негизинен cv2 - бул OpenCV китепканасы, ал коддордогу буйруктарды колдонууда маанилүү болгон бардык c ++ файлдарын жүктөйт (ал бардык аныктамаларды камтыйт).

Жана Numpy - бул көп өлчөмдүү массивди сактоо үчүн зарыл болгон питон китепканасы. Биз түстөр диапазонун координаттарын сактоо үчүн колдонобуз.

Жана numpy, негизинен, биздин кодду numpy ордуна np колдонуу менен бир аз кыскартууга жардам берет.

2 -кадам: Видеону тартуу

Видео тартуу
Видео тартуу

Бул python колдонууда абдан жөнөкөй. Бул жерде биз жөн гана видеорегистраторду иштетишибиз керек, ошондо ал кадрларды жаздыра баштайт.

Эми VideoCapture ичиндеги баа камераны көрсөтөт, менин учурда камера ноутбукка туташкан, андыктан 0.

Сиз экинчи камерага окшош 1ге барсаңыз болот жана башкалар. VideoCapture ал үчүн объектти түзөт.

3 -кадам: кадрды тартуу жана түсүн аныктоо

Сүрөттү тартуу жана түсүн аныктоо
Сүрөттү тартуу жана түсүн аныктоо

Эми бул жерде биз сүрөттү чыгарууга жардам бере турган видеонун заматта кадрын тартып алышыбыз үчүн бир нерсе кылышыбыз керек жана биз талапка ылайык иштей алабыз.

"while" циклы бизге циклди талап кылынган убакытка чейин иштетүүгө жардам берет. Эми "_, frame = cap.read ()" кадрдын жарактуулугун текшерүү үчүн колдонулат жана аны сактайт. "cap.read () - бул логикалык өзгөрмө жана эгер рамка туура окулса, чындыкты кайтарат жана эгер кадрлар жок болсо, анда ал эч кандай ката көрсөтпөйт, сиз жөн гана аласыз.

Эми 11 -сап жана 12 -линия негизинен биз табышыбыз керек болгон түстүн диапазонун аныктайт. Бул үчүн мен көк түскө көндүм.

Сиз каалаган түстү уланта аласыз, сизге ошол түстөгү BGR маанилерин терүү керек. Чыныгы дүйнөдө белгилүү бир түстү аныктоо биздин максатка жооп бербейт, тескерисинче биз көк түстүн диапазонун аныктайбыз.

Бул үчүн мен 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 ()" басылганда if блоктун if командасын аткара турган белгини аныктайт жана ал циклден чыгат.

Андан кийин cap.release () видеорегистраторду жабат жана cv2.destroyAllWindows () бардык ачылган терезелерди жабат.

Эгерде сизде кандайдыр бир маселе болсо, мага билдириңиз.

Булак кодуна шилтеме:

Сунушталууда: