import cv2 as cv import numpy as np def curve_fitness_demo(): image = np.zeros((400, 400, 3), dtype=np.uint8) x = np.array([30, 50, 100, 120]) y = np.array([100, 150, 240, 200]) for i in range(len(x)): cv.circle(image, (x[i], y[i]), 3, (255, 0, 0), -1, 8, 0) cv.imwrite("D:/javaopencv/curve.png", image) cv.imshow("image", image) poly = np.poly1d(np.polyfit(x, y, 3)) print(poly) for t in range(30, 250, 1): y_ = np.int(poly(t)) cv.circle(image, (t, y_), 1, (0, 0, 255), 1, 8, 0) cv.imshow("fit curve", image) cv.imwrite("D:/javaopencv/fitcurve2.png", image) def circle_fitness_demo(): src = cv.imread("D:/javaopencv/c2.png") cv.imshow("input", src) src = cv.GaussianBlur(src, (3, 3), 0) gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) cv.imshow("binary", binary) image, contours, hierachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) for i in range(len(contours)): rrt = cv.fitEllipse(contours[i]) # cv.ellipse(src, rrt, (0, 0, 255), 2, cv.LINE_AA) x, y = rrt[0] a, b = rrt[1] r = np.int((a/2 + b/2)/2) cv.circle(src, (np.int(x), np.int(y)), r, (255, 0, 255), 2, 8, 0) cv.circle(src, (np.int(x), np.int(y)), 4, (255, 0, 0), -1, 8, 0) cv.imshow("fit circle", src) cv.imwrite("D:/javaopencv/fitcircle.png", src) def line_fitness(): image = np.zeros((400, 400, 3), dtype=np.uint8) xp = np.array([30, 50, 100, 120]) yp = np.array([100, 150, 240, 200]) h, w, ch = image.shape pts = [] for i in range(len(xp)): cv.circle(image, (xp[i], yp[i]), 3, (255, 0, 0), -1, 8, 0) pts.append((xp[i], yp[i])) cv.imwrite("D:/javaopencv/curve.png", image) cv.imshow("image", image) [vx, vy, x, y] = cv.fitLine(np.array(pts), cv.DIST_L1, 0, 0.01, 0.01) y1 = int((-x * vy / vx) + y) y2 = int(((w - x) * vy / vx) + y) cv.line(image, (w - 1, y2), (0, y1), (0, 0, 255), 2) cv.imshow("line-fitness", image) def erode_dilate_demo(): src = cv.imread("D:/javaopencv/bin2.png") #cv.imshow("input", src) gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) cv.imshow("binary", binary) k = cv.getStructuringElement(cv.MORPH_ELLIPSE, (15, 15)) dst = cv.dilate(binary, k) cv.imshow("result", dst) def open_close_demo(): src = cv.imread("D:/javaopencv/bin2.png") cv.imshow("input", src) gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) cv.imshow("binary", binary) k = cv.getStructuringElement(cv.MORPH_RECT, (3, 3)) dst = cv.morphologyEx(binary, cv.MORPH_CLOSE, k, iterations=3) cv.imshow("result", dst) def hv_lines_demo(): src = cv.imread("D:/javaopencv/morph01.png") cv.imshow("input", src) gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) cv.imshow("binary", binary) k = cv.getStructuringElement(cv.MORPH_RECT, (1, 30)) dst = cv.morphologyEx(binary, cv.MORPH_OPEN, k, iterations=1) cv.imshow("result", dst) def gradient_demo(): src = cv.imread("D:/javaopencv/findball_906.png", cv.IMREAD_GRAYSCALE) ret, binary = cv.threshold(src, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) src = binary cv.imshow("input", src) k = cv.getStructuringElement(cv.MORPH_RECT, (3, 3)) dimage = cv.dilate(src, k) eimage = cv.erode(src, k) basic_grad = cv.morphologyEx(src, cv.MORPH_GRADIENT, k) internal_grad = cv.subtract(src, eimage) external_grad = cv.subtract(dimage, src) cv.imshow("basic_grad", basic_grad) cv.imshow("internal_grad", internal_grad) cv.imshow("external_grad", external_grad) xk = cv.getStructuringElement(cv.MORPH_RECT, (15, 1)) yk = cv.getStructuringElement(cv.MORPH_RECT, (1, 15)) dx = cv.dilate(src, xk) ex = cv.erode(src, xk) dy = cv.dilate(src, yk) ey = cv.erode(src, yk) xx = cv.subtract(dx, ex) yy = cv.subtract(dy, ey) cv.imshow("x-direction", xx) cv.imshow("y-direction", yy) def more_morphology_demo(): src = cv.imread("D:/javaopencv/202.png", cv.IMREAD_GRAYSCALE) ret, binary = cv.threshold(src, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) src = binary cv.imshow("input", src) k = cv.getStructuringElement(cv.MORPH_RECT, (15, 15)) bh = cv.morphologyEx(src, cv.MORPH_BLACKHAT, k) cv.imshow("black hat", bh) th = cv.morphologyEx(src, cv.MORPH_TOPHAT, k) cv.imshow("top hat", th) hmk1 = np.zeros((3, 3), dtype=np.uint8) hmk1[2, 2] = 1 hmk2 = np.zeros((3, 3), dtype=np.uint8) hmk2[0, 0] = 1 hm1 = cv.morphologyEx(src, cv.MORPH_HITMISS, hmk1) hm2 = cv.morphologyEx(src, cv.MORPH_HITMISS, hmk2) cv.imshow("hit and miss 1", hm1) cv.imshow("hit and miss 2", hm2) hm = cv.add(hm1, hm2) cv.imshow("hit and miss", hm) if __name__ == "__main__": curve_fitness_demo() #more_morphology_demo() cv.waitKey(0) cv.destroyAllWindows()
points_fitness.py
最新推荐文章于 2023-09-04 18:23:46 发布