Untitled
unknown
plain_text
3 years ago
9.0 kB
4
Indexable
import cv2 import numpy as np import math cap = cv2.VideoCapture(0) cap.set(3,640) # ID no.3 is for width cap.set(4,480) # ID no.4 is for height cap.set(10,100) #ID no.5 is for brightness' # the getContour function for detecting the contour in our image def getContours(img): norm_min = 1000000 cX_min=1000 cY_min=1000 cnt_min= None contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) for cnt in contours: area = cv2.contourArea(cnt) if area>=5000: # for detecting the largest contour in all detected contours we used the max function #largestcontour = max(contours, key=cv2.contourArea) # for detecting the center of each contour we used the following functions M = cv2.moments(cnt) cX = int(M["m10"] / M["m00"]) cY = int(M["m01"] / M["m00"]) norm=math.sqrt(math.pow((cX-960),2)+math.pow((cY-550),2)) if norm<norm_min: norm_min=norm cnt_min=cnt cX_min=cX cY_min=cY cv2.drawContours(imgContour, cnt, -1, (255, 255, 0), 1) # for determine the 4 parameter of the bounding rectangle to draw it around our area of interest # for drawing rectangle around our area of interest we used the rectangle function else: pass x, y, w, h = cv2.boundingRect(cnt_min) cv2.putText(imgContour, '.', (x + (w // 2), y + (h // 2)), cv2.FONT_ITALIC, 1, (255, 0, 255), 2) #cv2.putText(imgContour, ".", (cX_min, cY_min),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 255), 2) print('Module Center= ', ((x + (w // 2), y + (h // 2) + 10))) # center of each contour cv2.rectangle(imgContour, (x, y), (x + w, y + h), (0, 255, 255), 2) #print('contour center 2', cX_min, cY_min) def empty (a): pass # The name and the size of our center detection Track bar window cv2.namedWindow('Module center TrackBars') cv2.resizeWindow('Module center TrackBars', 650,430) # The name and the size of our center detection Track bar window cv2.namedWindow('String angel TrackBars') cv2.resizeWindow('String angel TrackBars', 650,430) # create Trackbar function to create a track bar cv2.createTrackbar('Hue Min', 'Module center TrackBars',0, 179, empty ) #Max value of Hue in OpenCV is 179 cv2.createTrackbar('Hue Max', 'Module center TrackBars',179, 179, empty ) cv2.createTrackbar('Sat Min', 'Module center TrackBars',0, 255, empty ) cv2.createTrackbar('Sat Max', 'Module center TrackBars',255, 255, empty ) cv2.createTrackbar('Val Min', 'Module center TrackBars',0, 255, empty ) cv2.createTrackbar('Val Max', 'Module center TrackBars',255, 255, empty ) cv2.createTrackbar('Can Min', 'Module center TrackBars',0, 255, empty ) cv2.createTrackbar('Can Max', 'Module center TrackBars',255, 255, empty ) # create Trackbar function to create a track bar cv2.createTrackbar('Hue Min', 'String angel TrackBars',0, 179, empty ) #Max value of Hue in OpenCV is 179 cv2.createTrackbar('Hue Max', 'String angel TrackBars',179, 179, empty ) cv2.createTrackbar('Sat Min', 'String angel TrackBars',0, 255, empty ) cv2.createTrackbar('Sat Max', 'String angel TrackBars',255, 255, empty ) cv2.createTrackbar('Val Min', 'String angel TrackBars',0, 255, empty ) cv2.createTrackbar('Val Max', 'String angel TrackBars',255, 255, empty ) cv2.createTrackbar('Can Min', 'String angel TrackBars',0, 255, empty ) cv2.createTrackbar('Can Max', 'String angel TrackBars',255, 255, empty ) # Stacking function for stacking images together def stackImages(imgArray,scale,lables=[]): sizeW= imgArray[0][0].shape[1] sizeH = imgArray[0][0].shape[0] rows = len(imgArray) cols = len(imgArray[0]) rowsAvailable = isinstance(imgArray[0], list) width = imgArray[0][0].shape[1] height = imgArray[0][0].shape[0] if rowsAvailable: for x in range ( 0, rows): for y in range(0, cols): imgArray[x][y] = cv2.resize(imgArray[x][y], (sizeW, sizeH), None, scale, scale) if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR) imageBlank = np.zeros((height, width, 3), np.uint8) hor = [imageBlank]*rows hor_con = [imageBlank]*rows for x in range(0, rows): hor[x] = np.hstack(imgArray[x]) hor_con[x] = np.concatenate(imgArray[x]) ver = np.vstack(hor) ver_con = np.concatenate(hor) else: for x in range(0, rows): imgArray[x] = cv2.resize(imgArray[x], (sizeW, sizeH), None, scale, scale) if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR) hor= np.hstack(imgArray) hor_con= np.concatenate(imgArray) ver = hor if len(lables) != 0: eachImgWidth= int(ver.shape[1] / cols) eachImgHeight = int(ver.shape[0] / rows) print(eachImgHeight) for d in range(0, rows): for c in range (0,cols): cv2.rectangle(ver,(c*eachImgWidth,eachImgHeight*d),(c*eachImgWidth+len(lables[d][c])*13+27,30+eachImgHeight*d),(255,255,255),cv2.FILLED) cv2.putText(ver,lables[d][c],(eachImgWidth*c+10,eachImgHeight*d+20),cv2.FONT_HERSHEY_COMPLEX,0.7,(255,0,255),2) return ver while True: success, img = cap.read() # imgContour is a copy from our original image imgContour = img.copy() # for extracting a certain value of the trace bar we added the getTrackbarpos Function h_min = cv2.getTrackbarPos('Hue Min','Module center TrackBars') h_max = cv2.getTrackbarPos('Hue Max', 'Module center TrackBars') s_min = cv2.getTrackbarPos('Sat Min', 'Module center TrackBars') s_max = cv2.getTrackbarPos('Sat Max', 'Module center TrackBars') v_min = cv2.getTrackbarPos('Val Min', 'Module center TrackBars') v_max = cv2.getTrackbarPos('Val Max', 'Module center TrackBars') C_min = cv2.getTrackbarPos('Can Min', 'Module center TrackBars') C_max = cv2.getTrackbarPos('Can Max', 'Module center TrackBars') # for extracting a certain value of the trace bar we added the getTrackbarpos Function hue_min = cv2.getTrackbarPos('Hue Min', 'String angel TrackBars') hue_max = cv2.getTrackbarPos('Hue Max', 'String angel TrackBars') sat_min = cv2.getTrackbarPos('Sat Min', 'String angel TrackBars') sat_max = cv2.getTrackbarPos('Sat Max', 'String angel TrackBars') val_min = cv2.getTrackbarPos('Val Min', 'String angel TrackBars') val_max = cv2.getTrackbarPos('Val Max', 'String angel TrackBars') Cat_min = cv2.getTrackbarPos('Can Min', 'String angel TrackBars') Cat_max = cv2.getTrackbarPos('Can Max', 'String angel TrackBars') # for creating a mask we need to creat a numpy array to put them in the inRange function (for module center) lower = np.array([h_min,s_min,v_min]) upper = np.array([h_max,s_max,v_max]) # for creating a mask we need to creat a numpy array to put them in the inRange function (for module center) lower_2 = np.array([hue_min, sat_min, val_min]) upper_2 = np.array([hue_max, sat_max, val_max]) # Img - Blur - HSV - Mask - imgResult by comparing our original image with the mask imgBlur = cv2.GaussianBlur(img, (3, 3), 0.5) imgHSV = cv2.cvtColor(imgBlur,cv2.COLOR_BGR2HSV) mask = cv2.inRange(imgHSV, lower, upper) mask_2 = cv2.inRange(imgHSV, lower_2, upper_2) imgResult = cv2.bitwise_and(img, img, mask=mask) imgResult_2 = cv2.bitwise_and(img, img, mask=mask_2) imgCanny = cv2.Canny(mask, C_min, C_max) # Hough line function for detection the lines in our image lines = cv2.HoughLines(mask_2, 1, np.pi / 180, 200) for rho, theta in lines[0]: a = np.cos(theta) b = np.sin(theta) x0 = a * rho y0 = b * rho x1 = int(x0 + 1000 * (-b)) y1 = int(y0 + 1000 * (a)) x2 = int(x0 - 1000 * (-b)) y2 = int(y0 - 1000 * (a)) cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2) print('String angle in radians=',theta) print('String angle in degrees=', math.degrees(theta)) #cv2.imwrite('pv.png', imgResult_2) # Just as extra information to see how canny function react to detect the edges in our imgResult photo getContours(img) cv2.imshow('Original', img) #cv2.imshow('Blur', imgBlur) #cv2.imshow('Gray', imgGray) cv2.imshow('Canny', imgCanny) #cv2.imshow('Blank', imgBlank) cv2.imshow('imgcontour',imgContour) cv2.imshow('HSV',imgHSV) cv2.imshow('Result', imgResult) cv2.imshow('mask',mask) #StackedImages = stackImages(([img, imgResult_2, mask_2 ], [imgContour, imgResult, mask]), 5) #cv2.imshow('stackedimages', StackedImages) if cv2.waitKey(1) & 0xFF == ord('q'): break
Editor is loading...