python opencv 检测圆_其他

 python opencv 检测圆_opencv_02

放大

python opencv 检测圆_python_03

 中心的三个没检测到

import cv2
import numpy as np
import matplotlib.pyplot as plt

w = 20
h = 5
params = cv2.SimpleBlobDetector_Params()
# Setup SimpleBlobDetector parameters.
print('params')
print(params)
print(type(params))


# Filter by Area.
params.filterByArea = True
params.minArea = 10e1
params.maxArea = 10e3

params.minDistBetweenBlobs = 25


# params.filterByColor = True
params.filterByConvexity = False

# tweak these as you see fit
# Filter by Circularity
# params.filterByCircularity = False
# params.minCircularity = 0.2

# params.blobColor = 0
# # # Filter by Convexity
# params.filterByConvexity = True
# params.minConvexity = 0.87

# Filter by Inertia
# params.filterByInertia = True
# params.filterByInertia = False
# params.minInertiaRatio = 0.01


# img = cv2.imread("circles/circels.jpg",1)
img = cv2.imread("circles/Snap_001.jpg",1)

gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Detect blobs.
# image = cv2.resize(gray_img, (int(img.shape[1]/4),int(img.shape[0]/4)), 1, 1, cv2.INTER_LINEAR)
# image = cv2.resize(gray_img, dsize=None, fx=0.25, fy=0.25, interpolation=cv2.INTER_LINEAR)
minThreshValue = 120
_, gray = cv2.threshold(gray, minThreshValue, 255, cv2.THRESH_BINARY)
gray = cv2.resize(gray, dsize=None, fx=2, fy=2, interpolation=cv2.INTER_LINEAR)
# plt.imshow(gray)
# cv2.imshow("gray",gray)

detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)

print(len(keypoints))


fig = plt.figure()
# im_with_keypoints = cv2.drawKeypoints(gray, keypoints, np.array([]), (0, 0, 255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
im_with_keypoints = cv2.drawKeypoints(gray, keypoints, np.array([]), (0, 0, 255),  cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

plt.imshow(cv2.cvtColor(im_with_keypoints, cv2.COLOR_BGR2RGB),interpolation='bicubic')
fname = "key points"
titlestr = '%s found %d keypoints' % (fname, len(keypoints))
plt.title(titlestr)
plt.show()

# cv2.imshow("graykey",gray)
# cv2.waitKey()

fig.canvas.set_window_title(titlestr)

ret, corners = cv2.findCirclesGrid(gray, (w, h), flags=(cv2.CALIB_CB_SYMMETRIC_GRID + cv2.CALIB_CB_CLUSTERING ), blobDetector=detector )
if corners is not None:
    cv2.drawChessboardCorners(img, (w, h), corners, corners is not None)
    print("find blob")
# # cv2.imshow('findCorners', img)
# cv2.waitKey()
    plt.imshow(img)
plt.show()