Click the "Xiaobai Learns Vision" above, select "Star" or "Top"
Heavy content delivered first
Background Introduction
Detailed Implementation Steps
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)gray = cv2.medianBlur(gray,3)circles = cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,100,
param1=200,param2=30,minRadius=200,maxRadius=300)
isNG = Falseif circles is None: print("Failed to find the circle!") else: circles = np.uint16(np.around(circles)) a, b, c = circles.shape print (circles.shape) for i in range(b): cv2.circle(img_copy, (circles[0][i][0], circles[0][i][1]), circles[0][i][2], (0, 0, 255), 3, cv2.LINE_AA) cv2.circle(img_copy, (circles[0][i][0], circles[0][i][1]), 2, (0, 255, 0), 3, cv2.LINE_AA) # draw center of circle cv2.imshow("findCircle", img_copy)
x = circles[0][i][0] - circles[0][i][2]y = circles[0][i][1] - circles[0][i][2]w = h = 2 * circles[0][i][2]center = (circles[0][i][0], circles[0][i][1])radius = circles[0][i][2]C = 2 * math.pi * radiusprint(C,radius)
ROI = img[y:y+h,x:x+w].copy()cv2.imshow('ROI',ROI)trans_center = (center[0]-x, center[1]-y)polarImg = cv2.warpPolar(ROI,(int(radius),int(C)),trans_center,radius,cv2.INTER_LINEAR + cv2.WARP_POLAR_LINEAR)polarImg = cv2.flip(polarImg,1) # MirrorpolarImg = cv2.transpose(polarImg)# Transposecv2.imshow('polarImg',polarImg)cv2.imwrite('polarImg.png',polarImg)
[3] Text recognition. You can use either EasyOCR or PaddleOCR; here we use EasyOCR.
result = reader.readtext(polarImg)print(result)if len(result) > 0: for i in range(0,len(result)): print(result[i][1]) if(result[i][2] < 0.4): continue for j in range(4): if j > 0: cv2.line(polarImg,(tuple(result[i][0][j-1])),(tuple(result[i][0][j])),(0,255,0),2,cv2.LINE_AA) cv2.line(polarImg,(tuple(result[i][0][0])),(tuple(result[i][0][3])),(0,255,0),2,cv2.LINE_AA) strText = result[i][1].replace(' ','') cv2.putText(polarImg,strText,(result[i][0][3][0],result[i][0][3][1]+20),0,0.8,(0,0,255),2)
cv2.imshow('polarImg-OCR',polarImg)
[4] Inverse polar coordinate transformation to restore the image containing the recognition results to a circular shape.
polarImg = cv2.flip(polarImg,0) # MirrorpolarImg = cv2.transpose(polarImg)# TransposepolarImg_Inv = cv2.warpPolar(polarImg,(w,h),trans_center,radius,cv2.INTER_LINEAR +
cv2.WARP_POLAR_LINEAR + cv2.WARP_INVERSE_MAP)cv2.imshow('polarImg_Inv',polarImg_Inv)
[5] Create a circular mask image to perform copyTo operation, ensuring the outside of the circle matches the original image.
mask = np.zeros((h,w,1),np.uint8) cv2.circle(mask,trans_center,radius-3,(255,255,255),-1, cv2.LINE_AA) cv2.imshow('mask', mask) ROI = img[y:y+h,x:x+w] for i in range(0,ROI.shape[0]): for j in range(0, ROI.shape[1]): if mask[i,j] > 0: ROI[i,j] = polarImg_Inv[i,j] cv2.imshow('result', img) cv2.waitKey(0)
Group Chat
Welcome to join the WeChat reader group to communicate with peers. Currently, there are WeChat groups for SLAM, 3D vision, sensors, autonomous driving, computational photography, detection, segmentation, recognition, medical imaging, GAN, algorithm competitions (which will gradually be subdivided in the future), please scan the WeChat ID below to join the group, with the note: “Nickname + School/Company + Research Direction”, for example: “Zhang San + Shanghai Jiao Tong University + Vision SLAM”. Please follow the format for the note, otherwise, it will not be approved. Successful additions will be invited into relevant WeChat groups based on research direction. Please do not send advertisements in the group, otherwise, you will be removed from the group. Thank you for your understanding~