Haben Sie jemals Harry Potters unsichtbaren Umhang gesehen? War es wunderbar Wollten Sie schon immer diesen Umhang tragen? Falls ja!! Dann werden wir in diesem Beitrag denselben Umhang bauen, mit dem Harry Potter unsichtbar wird. Ja, wir bauen es nicht wirklich, aber es geht nur um Grafiktricks.

In diesem Beitrag erfahren Sie, wie Sie mithilfe einfacher Computer-Vision-Techniken in OpenCV unseren eigenen "Unsichtbarkeitsumhang" erstellen . Hier haben wir diesen Code in Python geschrieben, da er eine umfassende und ausreichende Bibliothek zum Erstellen dieses Programms bietet.

Hier werden wir dieses magische Erlebnis mithilfe einer Bildverarbeitungstechnik namens Farberkennung und -segmentierung erstellen . Um diesen Code ausführen zu können, benötigen Sie ein MP4-Video mit dem Namen „ video.mp4“. Sie müssen ein Tuch der gleichen Farbe haben und es sollte keine andere Farbe in diesem Tuch sichtbar sein. Wir nehmen das rote Tuch. Wenn Sie ein anderes Tuch nehmen, bleibt der Code derselbe, jedoch mit geringfügigen Änderungen.

Warum rot? Grün ist mein Favorit?
Sicher, wir hätten Grün verwenden können, ist Rot nicht die Farbe des Magiers? Abgesehen von Witzen funktionieren Farben wie Grün oder Blau auch mit ein paar Änderungen im Code.
Diese Technik ist dem Green Screening entgegengesetzt . Beim grünen Screening entfernen wir den Hintergrund, aber hier entfernen wir den Vordergrundrahmen. Beginnen wir also mit unserem Code.

Algorithmus:



1. Erfassen und speichern Sie den Hintergrundrahmen [Dies wird einige Sekunden lang durchgeführt].
2. Erkennen Sie das rot gefärbte Tuch mithilfe des Farberkennungs- und Segmentierungsalgorithmus.
3. Segmentieren Sie das rot gefärbte Tuch, indem Sie eine Maske erstellen. [im Code verwendet]
4. Generieren Sie die endgültige erweiterte Ausgabe, um einen magischen Effekt zu erzielen. [video.mp4]

Unten ist der Code:

import cv2 
import numpy as np 
import time 
  
  
  
  
  
print(cv2.__version__)    
  
capture_video = cv2.VideoCapture("video.mp4") 
     
time.sleep(1
count = 0 
background = 0 
  
for i in range(60): 
    return_val, background = capture_video.read() 
    if return_val == False : 
        continue 
  
background = np.flip(background, axis = 1) 
  
while (capture_video.isOpened()): 
    return_val, img = capture_video.read() 
    if not return_val : 
        break 
    count = count + 1
    img = np.flip(img, axis = 1) 
  
    
    
  
    
    
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  
  
    
    
    
    lower_red = np.array([100, 40, 40])        
    upper_red = np.array([100, 255, 255]) 
    mask1 = cv2.inRange(hsv, lower_red, upper_red) 
    
    lower_red = np.array([155, 40, 40]) 
    upper_red = np.array([180, 255, 255]) 
    mask2 = cv2.inRange(hsv, lower_red, upper_red) 
    
  
    
    
    mask1 = mask1 + mask2 
  
    
    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) 
  
    
    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

Ausgabe:

Sie können den Quellcode im Projekt-Github-Repository auf Eingabevideos und weitere Details überprüfen - hier
 
Referenz: http://datasciencenthusiast.com/?p=71