我正在使用来自 opencv 的 simpleblobdetector 和 python 来识别图像中的斑点。
我能够让简单的斑点检测器工作并为我提供已识别斑点的位置。但是我也可以获得已识别斑点的惯性/凸度/圆度/等属性吗?
img = cv2.imread('image.png', cv2.IMREAD_GRAYSCALE)
# set up blob detector params
detector_params = cv2.SimpleBlobDetector_Params()
detector_params.filterByInertia = True
detector_params.minInertiaRatio = 0.001
detector_params.filterByArea = True
detector_params.maxArea = 10000000
detector_params.minArea = 1000
detector_params.filterByCircularity = True
detector_params.minCircularity = 0.0001
detector_params.filterByConvexity = True
detector_params.minConvexity = 0.01
detector = cv2.SimpleBlobDetector_create(detector_params)
# Detect blobs.
keypoints = detector.detect(img)
# print properties of identified blobs
for p in keypoints:
print(p.pt) # locations of blobs
# circularity???
# inertia???
# area???
# convexity???
# etc...
Run Code Online (Sandbox Code Playgroud)
谢谢
根据opencv.org,检测器返回的关键点不包含有关找到它们的算法的任何信息:
cv::KeyPoint:显着点检测器的数据结构。
类实例存储一个关键点,即由许多可用关键点检测器之一找到的点特征,例如 Harris 角点检测器、cv::FAST、cv::StarDetector、cv::SURF、cv::SIFT、cv::LDetector ETC。
关键点由二维位置、尺度(与需要考虑的邻域直径成正比)、方向和一些其他参数来表征。
您可以绘制关键点,显示大小和旋转:
img = cv2.drawKeypoints(img, keypoints, None, color=(0,255,0), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Run Code Online (Sandbox Code Playgroud)