opencv 有没有一种方法来“提取”和检测凹点,以适应椭圆?

tquggr8v  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(149)

这篇论文似乎与我的问题非常相关,但我可以在网上找到代码。
Splitting touching cells based on concave points and ellipse fitting也是。
我也在试图理解他们的算法。我一直在寻找接触物体的凹点。
下面是我的代码:

import numpy as np
import cv2

img = cv2.imread("binary_img.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret,thresh_img = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
thresh_img = 255- thresh_img
contours, hierarchy = cv2.findContours(thresh_img,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

hull = []

# calculate points for each contour
for i in range(len(contours)):
    # creating convex hull object for each contour
    hull.append(cv2.convexHull(contours[i], False))

# create an empty black image
drawing = np.zeros((thresh_img.shape[0], thresh_img.shape[1], 3), np.uint8)

# draw contours and hull points
for i in range(len(contours)):
    color_contours = (0, 255, 0) # green - color for contours
    color = (255, 0, 0) # blue - color for convex hull
    # draw ith contour
    cv2.drawContours(drawing, contours, i, color_contours, 1, 8, hierarchy)
    # draw ith convex hull object
    cv2.drawContours(drawing, hull, i, color, 1, 8)

cv2.imwrite("19_drawing.png", drawing)
cv2.imshow("Drawing", drawing)
cv2.waitKey()

目标

我想得到下面的凹点,并适合椭圆。我的代码只是简单地 Package 四肢。
任何帮助或指导将不胜感激。先谢谢你。

dxxyhpgq

dxxyhpgq1#

第一个明显的点是探索凸缺陷。凹点是凸壳的缺陷,所以如果你选择最小的,你可以很容易地找到它们。另一个方向是探索傅立叶描述符并检查实际点与其描述符之间的Map。FD的优点是它们是方向和尺度不变的。

相关问题