Skip to content

Instantly share code, notes, and snippets.

@osoleve
Created August 11, 2020 00:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save osoleve/7cbae145fc35341142772fe7ffced665 to your computer and use it in GitHub Desktop.
Save osoleve/7cbae145fc35341142772fe7ffced665 to your computer and use it in GitHub Desktop.
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
rgb_noise_mask = np.random.randint(0, 256, size=frame.shape, dtype=np.uint8)
rgb_noise_mask = cv2.resize(
cv2.resize(rgb_noise_mask, (rgb_noise_mask.shape[1] // 25, rgb_noise_mask.shape[0] // 25),),
(rgb_noise_mask.shape[1], rgb_noise_mask.shape[0]),
interpolation=cv2.INTER_AREA,
)
for _ in range(5):
# Several rounds of rolling and blurring to
# make a pretty tie-dye and smooth the edges of the colormap
rgb_noise_mask = np.roll(rgb_noise_mask, 50, 0)
rgb_noise_mask = np.roll(rgb_noise_mask, 50, 1)
rgb_noise_mask = cv2.GaussianBlur(rgb_noise_mask, (33, 33), 0)
while True:
ret, frame = cap.read()
edges = cv2.Canny(frame, 100, 200, L2gradient=True)
edges = np.dstack((edges,)*3)
kernel = np.ones((2,2), dtype=np.uint8)
edges = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)
fudge_x, fudge_y = np.random.randint(1, 10, 2)
x_fudged_edges = np.roll(edges, fudge_x, 1)
y_fudged_edges = np.roll(edges, fudge_y, 0)
fudged_edges = cv2.add(x_fudged_edges, y_fudged_edges)
rainbow_edges = (fudged_edges * rgb_noise_mask).astype(np.uint8)
frame = edges + rainbow_edges
cv2.imshow("frame", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment