这主要是因为我设置的阈值if A < 300 or A > 1800: continue
def Cluster(I):
I_detected = np.copy(I)
contours, _ = cv2.findContours(I_detected, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
num = 0
grain_coord = []
area = []
perimeter = []
for c in contours:
A = cv2.contourArea(c)
if A < 300 or A > 1800:
continue
print(num, A)
num += 1
minAreaRect = cv2.minAreaRect(c)
rectCnt = np.int64(cv2.boxPoints(minAreaRect))
cv2.drawContours(I_detected, [rectCnt], 0, (0,0,0), 2)
P = cv2.arcLength(c, closed=True)
grain_coord.append(rectCnt)
area.append(A)
perimeter.append(P)
return I_detected, num, np.array(grain_coord), area, perimeter
这个阈值很重要,因为如果我将阈值设置为变化很大,那么它也会拾取其他颗粒,但是我试图从颗粒中提取的特征也会变化很大。具体如下:
这些图像相同,但阈值设置为:if A < 300 or A > 3500: continue
结果/特点如下:
关注每个结果的前4列
结果1&;结果2主要在面积和周长上存在偏差,而高度和宽度差异不大
结果3在所有4个参数上完全不同,且存在显著差异
有没有一种方法可以让我不必担心拍摄图像的距离,同时还能使提取的特征变化最小
我只是在寻找一种方法来解决这个问题,或者找到一些替代方法来解决这个问题
目前没有回答
相关问题 更多 >
编程相关推荐