Невидимый плащ с использованием OpenCV | Проект Python

Опубликовано: 20 Марта, 2022

Вы когда-нибудь видели плащ-невидимку Гарри Поттера; Было ли это чудесно? Вы когда-нибудь хотели надеть этот плащ? Если да!! затем в этом посте мы создадим тот же плащ, который использует Гарри Поттер, чтобы стать невидимым. Да, мы не строим его по-настоящему, но все дело в графическом обмане.

В этом посте мы узнаем, как создать наш собственный «Плащ-невидимку», используя простые методы компьютерного зрения в OpenCV . Здесь мы написали этот код на Python, потому что он предоставляет исчерпывающую и достаточную библиотеку для сборки этой программы.

Here, we will create this magical experience using an image processing technique called Color detection and segmentation. In order to run this code, you need an mp4 video named “video.mp4“. You must have a cloth of same color and no other color should be visible into that cloth. We are taking the red cloth. If you are taking some other cloth, the code will remain the same but with minute changes.

Почему красный? Зеленый мой любимый?
Конечно, мы могли бы использовать зеленый, разве красный не цвет фокусника? Шутки в сторону, такие цвета, как зеленый или синий, также будут работать нормально с небольшими изменениями в коде.
Этот метод противоположен Зеленому скринингу . В зеленом растрировании мы удаляем фон, но здесь мы удаляем рамку переднего плана. Итак, начнем наш код.

Алгоритм:

1. Capture and store the background frame [ This will be done for some seconds ]
2. Detect the red colored cloth using color detection and segmentation algorithm.
3. Segment out the red colored cloth by generating a mask. [ used in code ]
4. Generate the final augmented output to create a magical effect. [ video.mp4 ]

Below is the Code:

import cv2
import numpy as np
import time
  
# replace the red pixels ( or undesired area ) with
# background pixels to generate the invisibility feature.
  
## 1. Hue: This channel encodes color information. Hue can be
# thought of an angle where 0 degree corresponds to the red color, 
# 120 degrees corresponds to the green color, and 240 degrees 
# corresponds to the blue color.
  
## 2. Saturation: This channel encodes the intensity/purity of color.
# For example, pink is less saturated than red.
  
## 3. Value: This channel encodes the brightness of color.
# Shading and gloss components of an image appear in this 
# channel reading the videocapture video  
  
# in order to check the cv2 version
print(cv2.__version__)   
  
# taking video.mp4 as input.
# Make your path according to your needs 
capture_video = cv2.VideoCapture("video.mp4")
     
# give the camera to warm up
time.sleep(1
count = 0 
background = 0 
  
# capturing the background in range of 60
# you should have video that have some seconds
# dedicated to background frame so that it 
# could easily save the background image
for i in range(60):
    return_val, background = capture_video.read()
    if return_val == False :
        continue 
  
background = np.flip(background, axis = 1) # flipping of the frame 
  
# we are reading from video 
while (capture_video.isOpened()):
    return_val, img = capture_video.read()
    if not return_val :
        break 
    count = count + 1
    img = np.flip(img, axis = 1)
  
    # convert the image - BGR to HSV
    # as we focused on detection of red color 
  
    # converting BGR to HSV for better 
    # detection or you can convert it to gray
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 
  
    #-------------------------------------BLOCK----------------------------#
    # ranges should be carefully chosen
    # setting the lower and upper range for mask1
    lower_red = np.array([100, 40, 40])       
    upper_red = np.array([100, 255, 255])
    mask1 = cv2.inRange(hsv, lower_red, upper_red)
    # setting the lower and upper range for mask2 
    lower_red = np.array([155, 40, 40])
    upper_red = np.array([180, 255, 255])
    mask2 = cv2.inRange(hsv, lower_red, upper_red)
    #----------------------------------------------------------------------#
  
    # the above block of code could be replaced with
    # some other code depending upon the color of your cloth 
    mask1 = mask1 + mask2
  
    # Refining the mask corresponding to the detected red color
    mask1 = cv2.morphologyEx(mask1, cv2.MORPH_OPEN, np.ones((3, 3),
                                         np.uint8), iterations = 2)
    mask1 = cv2.dilate(mask1, np.ones((3, 3), np.uint8), iterations = 1)
    mask2 = cv2.bitwise_not(mask1)
  
    # Generating the final output
    res1 = cv2.bitwise_and(background, background, mask = mask1)
    res2 = cv2.bitwise_and(img, img, mask = mask2)
    final_output = cv2.addWeighted(res1, 1, res2, 1, 0)
  
    cv2.imshow("INVISIBLE MAN", final_output)
    k = cv2.waitKey(10)
    if k == 27:
        break

Выход:

Вы можете проверить исходный код в репозитории проекта на github, входное видео и более подробную информацию - здесь

Ссылка: http://datasciencenthusiast.com/?p=71

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.