points_fitness.py

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()



Guess you like

Origin blog.csdn.net/xsjzdrxsjzdr/article/details/93401982
Recommended