Introduction: Invisible Cloak of Potter With Python
Who does not want to acquire super power? Super power of being INVISIBLE? YES you can do so with just a few lines of codes .So what are you waiting for ? Prepare yourself for the surprise . Lets get started.......
Its a simple computer vision technique which create a magical effect . The technique is called color detection and segmentation. Here we will be using Red colored cloth to use as a cloak . You can also use green or blue or anycolored clothes with some minute changes in the code and create that magical effect .
Step 1: Install Python
First You have to make sure that you have python installed in your device , might be python 3 or have Jupyter Notebook . I have done my project in Jupyter Notebook. It provides a simple browser based IDE for python to do your coding stuffs.
You can download from this link - https://www.anaconda.com/products/individual
Step 2: Install OpenCV
After that you have to install OpenCV . Open Jupyter Notebook and write the following command to install the required OpenCV modules :-
pip install opencv-python
I have already installed OpenCV , so it is showing :- Requirement already satisfied.
Step 3: Algorithm to Be Used
- Give some time to Capture the background frame.
Now detection of red/green/blue color using color detection and segmentation algo.
Segment out the red/green/blue colored cloth .
Now show the final magical output.
Step 4: Magical Code
#Invisible Cloak By A.D
import numpy as np
import cv2
import time
capture=cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
final = cv2.VideoWriter('pOtterF.avi' , fourcc, 20.0, (640,480))
time.sleep(2)
background = 0 #capture the background
for i in range(30):
ret, background = capture.read()#capture the image
while(capture.isOpened()):
ret, img = capture.read()
if not ret:
break
hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#for red
lower_red = np.array([0,120,70])
upper_red = np.array([20,255,255])
mask1 = cv2.inRange(hsv , lower_red , upper_red)
lower_red = np.array([170,120,70])
upper_red = np.array([180,255,255])
mask2 = cv2.inRange(hsv , lower_red , upper_red)
#for Green comment out the above 6 lines of code for red color and use the following three lines
# lower_green = np.array([25,52,72])
# upper_green = np.array([102,255,255])
# mask1 = cv2.inRange(hsv , lower_green , upper_green)
#for blue comment out the above 6 lines of code for red color and use the following three lines
#lower_blue = np.array([94, 80, 2])
#upper_blue = np.array([126, 255, 255])
#mask1 = cv2.inRange(hsv , lower_blue , upper_blue)
mask1=mask1+mask2 # for green and blue remove this line
mask1=cv2.morphologyEx(mask1, cv2.MORPH_OPEN ,np.ones((3,3) , np.uint8) , iterations=2)
mask1=cv2.morphologyEx(mask1, cv2.MORPH_DILATE ,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)
final.write(final_output)
cv2.imshow('pOtterF' , final_output)
if cv2.waitKey(1) & 0xFF == ord('q'): #press 'q' to close the window
break
capture.release()
final.release()
cv2.destroyAllWindows()Step 5: Now Enjoy the Magic
After you run the code wait for some time for the web cam to capture the background. Then you enter the scene with your RED/GREEN/BLUE cloak and enjoy the super power of being invisible .


