From bcc0b7b1dcd119cd6836acf5152a14be25f183b4 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 11 Oct 2017 14:09:24 +0530 Subject: [PATCH] Image Processing examples added --- .../HSV Color filter.py | 52 +++++++++++ .../Mouse.py | 47 ++++++++++ .../README.md | 11 +++ .../Hand Detection/Finger Detect.py | 90 +++++++++++++++++++ .../Hand Detection/README.md | 9 ++ .../HSV Color filter.py | 52 +++++++++++ .../Object Detect By Color/README.md | 11 +++ .../object detect by color.py | 33 +++++++ 8 files changed, 305 insertions(+) create mode 100755 sampleImageprocessing/Controll Mouse with a moving object/HSV Color filter.py create mode 100755 sampleImageprocessing/Controll Mouse with a moving object/Mouse.py create mode 100755 sampleImageprocessing/Controll Mouse with a moving object/README.md create mode 100755 sampleImageprocessing/Hand Detection/Finger Detect.py create mode 100755 sampleImageprocessing/Hand Detection/README.md create mode 100755 sampleImageprocessing/Object Detect By Color/HSV Color filter.py create mode 100755 sampleImageprocessing/Object Detect By Color/README.md create mode 100755 sampleImageprocessing/Object Detect By Color/object detect by color.py diff --git a/sampleImageprocessing/Controll Mouse with a moving object/HSV Color filter.py b/sampleImageprocessing/Controll Mouse with a moving object/HSV Color filter.py new file mode 100755 index 0000000..271dc46 --- /dev/null +++ b/sampleImageprocessing/Controll Mouse with a moving object/HSV Color filter.py @@ -0,0 +1,52 @@ +import cv2 +import numpy as np + +def callback(x): + pass + +cap = cv2.VideoCapture(0) +cv2.namedWindow('image') + +ilowH = 0 +ihighH = 179 + +ilowS = 0 +ihighS = 255 +ilowV = 0 +ihighV = 255 + +cv2.createTrackbar('lowH','image',ilowH,179,callback) +cv2.createTrackbar('highH','image',ihighH,179,callback) +cv2.createTrackbar('lowS','image',ilowS,255,callback) +cv2.createTrackbar('highS','image',ihighS,255,callback) +cv2.createTrackbar('lowV','image',ilowV,255,callback) +cv2.createTrackbar('highV','image',ihighV,255,callback) + + + +while(True): + ret, frame = cap.read() + ilowH = cv2.getTrackbarPos('lowH', 'image') + ihighH = cv2.getTrackbarPos('highH', 'image') + ilowS = cv2.getTrackbarPos('lowS', 'image') + ihighS = cv2.getTrackbarPos('highS', 'image') + ilowV = cv2.getTrackbarPos('lowV', 'image') + ihighV = cv2.getTrackbarPos('highV', 'image') + + hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) + + lower_hsv = np.array([ilowH, ilowS, ilowV]) + higher_hsv = np.array([ihighH, ihighS, ihighV]) + mask = cv2.inRange(hsv, lower_hsv, higher_hsv) + mask = cv2.erode(mask, None, iterations=6) + mask = cv2.dilate(mask, None, iterations=6) + frame = cv2.bitwise_and(frame, frame, mask=mask) + + cv2.imshow('image', frame) + k = cv2.waitKey(1000) & 0xFF # large wait time to remove freezing + if k == 113 or k == 27: + break + + +cv2.destroyAllWindows() +cap.release() diff --git a/sampleImageprocessing/Controll Mouse with a moving object/Mouse.py b/sampleImageprocessing/Controll Mouse with a moving object/Mouse.py new file mode 100755 index 0000000..0bacac2 --- /dev/null +++ b/sampleImageprocessing/Controll Mouse with a moving object/Mouse.py @@ -0,0 +1,47 @@ +import cv2 +import numpy as np + +import win32api +global cam +cam = cv2.VideoCapture(0) + +def diffImg(t0, t1, t2): + d1 = cv2.absdiff(t2, t1) + d2 = cv2.absdiff(t1, t0) + return cv2.bitwise_and(d1, d2) +def main(): + global cam + t_minus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) + t = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) + t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) + while True: + ret, frame = cam.read() + hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) + lower_hsv = np.array([0, 130, 147]) + higher_hsv = np.array([22, 255, 215]) + mask = cv2.inRange(hsv, lower_hsv, higher_hsv) + mask = cv2.erode(mask, None, iterations=5) + mask = cv2.dilate(mask, None, iterations=5) + cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, + cv2.CHAIN_APPROX_SIMPLE) + cnt=cnts[0] + if len(cnts)>0: + x,y,w,h = cv2.boundingRect(cnt) + xx,yy=(2*x+w)/2 , (2*y+h)/2 + if xx>0 and xx<1366 and yy>0 and yy<768: + win32api.SetCursorPos((1366-(xx*3),yy*3)) + + + (cnts) = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, + cv2.CHAIN_APPROX_SIMPLE) + t_minus = t + t = t_plus + t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) + cv2.imshow("Mouse", frame) + key = cv2.waitKey(10) + if key == 27: + cv2.destroyWindow(winName) + break +main() + + diff --git a/sampleImageprocessing/Controll Mouse with a moving object/README.md b/sampleImageprocessing/Controll Mouse with a moving object/README.md new file mode 100755 index 0000000..5bc7c7c --- /dev/null +++ b/sampleImageprocessing/Controll Mouse with a moving object/README.md @@ -0,0 +1,11 @@ +# ImageProcessing +Image Processing projects With OpenCV Python. + +This Program can control mouse cursor with a moving object.It detects the onject by its color. +Use "HSV Color filter.py" to filter the object. +Then Edit "Mouse.py" and change the following lines with values HSV values + + lower_hsv = np.array([lowH, lowS,lowV]) + higher_hsv = np.array([highH, highS, highV]) + +Save it and RUN! \ No newline at end of file diff --git a/sampleImageprocessing/Hand Detection/Finger Detect.py b/sampleImageprocessing/Hand Detection/Finger Detect.py new file mode 100755 index 0000000..508e677 --- /dev/null +++ b/sampleImageprocessing/Hand Detection/Finger Detect.py @@ -0,0 +1,90 @@ +import numpy as np +import cv2 +from math import * +def diffImg(t0, t1, t2): + d1 = cv2.absdiff(t2, t1) + d2 = cv2.absdiff(t1, t0) + return cv2.bitwise_and(d1, d2) + +cap = cv2.VideoCapture(0) +nl,pl=[0,0,0,0,0],[0,0,0,0,0] +jjjj=[0,0,0,0,0] +while(1): + ret, frame = cap.read() + crop_frame = frame[0:300, 0:300] + gray_image = cv2.cvtColor(crop_frame, cv2.COLOR_BGR2GRAY) + ret, mask = cv2.threshold(gray_image, 145, 255, cv2.THRESH_BINARY) + mask_inv = cv2.bitwise_not(mask) + mask_inv = cv2.erode(mask_inv, None, iterations=1) + mask_inv = cv2.dilate(mask_inv, None, iterations=1) + drawing=mask_inv + ret,thresh = cv2.threshold(mask_inv,127,255,0) + im2,contours,hierarchy = cv2.findContours(thresh, 1, 2) + cv2.rectangle(frame, (0, 0), (300, 300), (255,0,0), 2) + + + if len (contours)>0: + max_area=100 + ci=0 + for i in range(len(contours)): + cnt=contours[i] + area = cv2.contourArea(cnt) + if(area>max_area): + max_area=area + ci=i + + #Largest area contour + cnts = contours[ci] + M = cv2.moments(cnts) + cX = int(M["m10"] / M["m00"]) + cY = int(M["m01"] / M["m00"]) + cv2.circle(frame,(cX,cY),10,[100,255,255],3) + hull = cv2.convexHull(cnts) + hull2 = cv2.convexHull(cnts,returnPoints = False) + defects = cv2.convexityDefects(cnts,hull2) + FarDefect = [] + + try: + ccc=0 + for i in range(defects.shape[0]): + s,e,f,d = defects[i,0] + start = tuple(cnts[s][0]) + end = tuple(cnts[e][0]) + far = tuple(cnts[f][0]) + dist = sqrt( (start[0] - end[0])**2 + (start[1] - end[1])**2 ) + + if 1: + FarDefect.append(far) + #print end[0]-far[0],far[1]-end[1] + a=sqrt((far[0]-end[0])**2+ (end[1]-far[1])**2) + b=sqrt((start[0]-far[0])**2+ (start[1]-far[1])**2) + c=sqrt((start[1]-end[1])**2+(start[0]-end[0])**2) + angle=(a**2+b**2-c**2)/(2*a*b) + angle=acos(angle) + + if (angle*180)/(22/7)<90 and dist>10: + cv2.line(frame,(cX,cY),end,[125,255,0],1) + cv2.line(frame,(cX,cY),end,[125,255,0] ,1) + cv2.circle(frame,end,10,[100,255,255],3) + cv2.line(frame,(cX,cY),end,[125,255,0],1) + cv2.circle(frame,end,10,[100,255,255],3) + + except Exception as e: + pass + + cv2.imshow('Dilation',drawing) + + frame = cv2.resize(frame, (1366, 765), interpolation=cv2.INTER_CUBIC) + cv2.imshow('frame',frame) + + #cv2.imshow('cropped frame',crop_frame) + cv2.imshow('grey cropped frame',gray_image) + cv2.imshow('t',mask) + cv2.imshow('t2',mask_inv) + #cv2.imshow('drawing',drawing) + + if cv2.waitKey(1) & 0xFF == ord('q'): + break + +cap.release() +cv2.destroyAllWindows() diff --git a/sampleImageprocessing/Hand Detection/README.md b/sampleImageprocessing/Hand Detection/README.md new file mode 100755 index 0000000..5ac6829 --- /dev/null +++ b/sampleImageprocessing/Hand Detection/README.md @@ -0,0 +1,9 @@ +# ImageProcessing +Image Processing projects With OpenCV Python. + +This program identifies fingers of one hand.Just run "Finger Detect.py" and you can seea blue rectangle on the top left. +Make that area with a light color background and bring your one hand to that area. + +See this video + +https://vimeo.com/228470426 \ No newline at end of file diff --git a/sampleImageprocessing/Object Detect By Color/HSV Color filter.py b/sampleImageprocessing/Object Detect By Color/HSV Color filter.py new file mode 100755 index 0000000..271dc46 --- /dev/null +++ b/sampleImageprocessing/Object Detect By Color/HSV Color filter.py @@ -0,0 +1,52 @@ +import cv2 +import numpy as np + +def callback(x): + pass + +cap = cv2.VideoCapture(0) +cv2.namedWindow('image') + +ilowH = 0 +ihighH = 179 + +ilowS = 0 +ihighS = 255 +ilowV = 0 +ihighV = 255 + +cv2.createTrackbar('lowH','image',ilowH,179,callback) +cv2.createTrackbar('highH','image',ihighH,179,callback) +cv2.createTrackbar('lowS','image',ilowS,255,callback) +cv2.createTrackbar('highS','image',ihighS,255,callback) +cv2.createTrackbar('lowV','image',ilowV,255,callback) +cv2.createTrackbar('highV','image',ihighV,255,callback) + + + +while(True): + ret, frame = cap.read() + ilowH = cv2.getTrackbarPos('lowH', 'image') + ihighH = cv2.getTrackbarPos('highH', 'image') + ilowS = cv2.getTrackbarPos('lowS', 'image') + ihighS = cv2.getTrackbarPos('highS', 'image') + ilowV = cv2.getTrackbarPos('lowV', 'image') + ihighV = cv2.getTrackbarPos('highV', 'image') + + hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) + + lower_hsv = np.array([ilowH, ilowS, ilowV]) + higher_hsv = np.array([ihighH, ihighS, ihighV]) + mask = cv2.inRange(hsv, lower_hsv, higher_hsv) + mask = cv2.erode(mask, None, iterations=6) + mask = cv2.dilate(mask, None, iterations=6) + frame = cv2.bitwise_and(frame, frame, mask=mask) + + cv2.imshow('image', frame) + k = cv2.waitKey(1000) & 0xFF # large wait time to remove freezing + if k == 113 or k == 27: + break + + +cv2.destroyAllWindows() +cap.release() diff --git a/sampleImageprocessing/Object Detect By Color/README.md b/sampleImageprocessing/Object Detect By Color/README.md new file mode 100755 index 0000000..35ff980 --- /dev/null +++ b/sampleImageprocessing/Object Detect By Color/README.md @@ -0,0 +1,11 @@ +# ImageProcessing +Image Processing projects With OpenCV Python + + +Run "HSV Color filter.py" and filter the object color you want to detect. +Then edit "object detect by color.py" and change the following lines with values HSV values + + lower_hsv = np.array([lowH, lowS,lowV]) + higher_hsv = np.array([highH, highS, highV]) + +Save it and RUN! \ No newline at end of file diff --git a/sampleImageprocessing/Object Detect By Color/object detect by color.py b/sampleImageprocessing/Object Detect By Color/object detect by color.py new file mode 100755 index 0000000..e8c48ba --- /dev/null +++ b/sampleImageprocessing/Object Detect By Color/object detect by color.py @@ -0,0 +1,33 @@ +import numpy as np +import cv2 + +cap = cv2.VideoCapture(0) +dd=True +while(dd): + ret, frame = cap.read() + fg=frame + hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) + lower_hsv = np.array([0, 163, 182]) + higher_hsv = np.array([110, 255, 254]) + mask = cv2.inRange(hsv, lower_hsv, higher_hsv) + mask = cv2.erode(mask, None, iterations=2) + mask = cv2.dilate(mask, None, iterations=2) + + cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, + cv2.CHAIN_APPROX_SIMPLE) + cnt = cnts[0] + M = cv2.moments(cnt) + if len(cnts)>0: + frame=fg + + x,y,w,h = cv2.boundingRect(cnt) + cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2) + + + + cv2.imshow('frame',frame) + if cv2.waitKey(1) & 0xFF == ord('q'): + break + +cap.release() +cv2.destroyAllWindows()