|
@ -0,0 +1,47 @@ |
|
|
|
|
|
import cv2 |
|
|
|
|
|
import time |
|
|
|
|
|
import numpy as np |
|
|
|
|
|
|
|
|
|
|
|
cap = cv2.VideoCapture(1) |
|
|
|
|
|
|
|
|
|
|
|
def threshold_slow(image): |
|
|
|
|
|
h = image.shape[0] |
|
|
|
|
|
w = image.shape[1] |
|
|
|
|
|
for y in range(0, h): |
|
|
|
|
|
for x in range(0, w): |
|
|
|
|
|
if np.any(image[y, x] != 0): |
|
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
return False |
|
|
|
|
|
|
|
|
|
|
|
while True: |
|
|
|
|
|
ret, frame = cap.read() |
|
|
|
|
|
frame_org = frame |
|
|
|
|
|
frame = frame[100:300, 100:300] |
|
|
|
|
|
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) |
|
|
|
|
|
sensitivity = 40 |
|
|
|
|
|
lower_white = np.array([0,0,255-sensitivity]) |
|
|
|
|
|
upper_white = np.array([255,sensitivity,255]) |
|
|
|
|
|
mask = cv2.inRange(hsv, lower_white, upper_white) |
|
|
|
|
|
res = cv2.bitwise_and(frame,frame, mask=mask) |
|
|
|
|
|
|
|
|
|
|
|
res = cv2.erode(res, None, iterations=2) |
|
|
|
|
|
res = cv2.dilate(res, None, iterations=4) |
|
|
|
|
|
|
|
|
|
|
|
mask = cv2.erode(mask, None, iterations=2) |
|
|
|
|
|
mask = cv2.dilate(mask, None, iterations=4) |
|
|
|
|
|
|
|
|
|
|
|
if threshold_slow(res): |
|
|
|
|
|
cv2.rectangle(frame_org, (100, 100), (300, 300), (255, 0, 0), 2) |
|
|
|
|
|
|
|
|
|
|
|
cv2.imshow('frame', frame) |
|
|
|
|
|
cv2.imshow('org', frame_org) |
|
|
|
|
|
cv2.imshow('mask', mask) |
|
|
|
|
|
cv2.imshow('res', res) |
|
|
|
|
|
|
|
|
|
|
|
k = cv2.waitKey(5) & 0xFF |
|
|
|
|
|
if k == ord('q'): |
|
|
|
|
|
break |
|
|
|
|
|
|
|
|
|
|
|
cap.release() |
|
|
|
|
|
cv2.destroyAllWindows() |