1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| import cv2 as cv import numpy as np import copy
def circle_flatten() : img = cv.imread('images/circle_band.bmp') img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
circles = cv.HoughCircles(img_gray, cv.HOUGH_GRADIENT, 1, 50, param1 = 170, param2 = 100).squeeze() circle_radius = circles[ : , 2] radius_biggest_index = np.argsort(circle_radius)[-1] print(radius_biggest_index) circle = np.uint16(np.around(circles[radius_biggest_index])) cv.circle(img, (circle[0], circle[1]), radius = circle[2], color = (0, 0, 255), thickness = 5) cv.circle(img, (circle[0], circle[1]), radius = 2, color = (255, 0, 0), thickness = 2)
height = int(circle_radius[radius_biggest_index] * np.pi * 2) width = int(circle_radius[radius_biggest_index] / 3) rectangle = np.zeros([width, height]) print(rectangle.shape) print(img_gray.shape) for row in range(width) : for col in range(height) : theta = np.pi * 2.0 / height * (col + 1) rho = circle_radius[radius_biggest_index] - row - 1 position_x = int(circle[0] + rho * np.cos(theta) + 0.5) position_y = int(circle[1] - rho * np.sin(theta) + 0.5) rectangle[row, col] = img_gray[position_y, position_x] rectangle = np.uint8(rectangle) cv.imwrite('flatten.png', rectangle) cv.imshow('rectangle', rectangle) cv.imshow('img', img) cv.waitKey(0)
if __name__ == '__main__': circle_flatten()
|