0

opencvで粗さの等高線を計算する方法はありますか?

画像サンプル:https ://docs.google.com/file/d/0ByS6Z5WRz-h2NDgySmJ6NnpId0U/edit?usp = Sharing

アップデート

粗さを計算するための私のコード:

周囲の輪郭/凸包の周囲

nomeimg = 'Riscalate2/JPEG/e (5).jpg'

img = cv2.imread(nomeimg)

gray = cv2.imread(nomeimg,0)#convert grayscale adn binarize

element = cv2.getStructuringElement(cv2.MORPH_CROSS,(6,6)) 
graydilate = cv2.erode(gray, element) #imgbnbin

cv2.imshow('image',graydilate)
cv2.waitKey(0)

ret,thresh = cv2.threshold(graydilate,127,255,cv2.THRESH_BINARY_INV)   # binarize

imgbnbin = thresh
cv2.imshow('bn',thresh)
cv2.waitKey()

#element = cv2.getStructuringElement(cv2.MORPH_CROSS,(2,2))
#element = np.ones((11,11),'uint8')


contours, hierarchy = cv2.findContours(imgbnbin, cv2.RETR_TREE ,cv2.CHAIN_APPROX_SIMPLE)
print(len(contours))


# Take only biggest contour basing on area
Areacontours = list()
calcarea = 0.0
unicocnt = 0.0
for i in range (0, len(contours)):
    area = cv2.contourArea(contours[i])
    #print("area")
    #print(area)
    if (area > 90 ):  #con 90 trova i segni e togli puntini
        if (calcarea<area):
            calcarea = area
            unicocnt = contours[i]

#ROUGHNESS
perimeter = cv2.arcLength(unicocnt,True)
hull = cv2.convexHull(unicocnt,returnPoints = False)
hullperimeter = cv2.arcLength(hull,True)

print("perimeter")
print(perimeter)
print("hullperimeter")
print(hullperimeter)


roughness = perimeter/hullperimeter
print("roughness")
print(roughness)

エラー:

Traceback (most recent call last):
  File "C:\Python27\nuovefeature.py", line 417, in <module>
    hullperimeter = cv2.arcLength(hull,True)
error: ..\..\..\src\opencv\modules\imgproc\src\contours.cpp:1886: error: (-215) curve.checkVector(2) >= 0 && (curve.depth() == CV_32F || curve.depth() == CV_32S)
4

1 に答える 1

1

エラーは凸包の検出線にあります。

hull = cv2.convexHull(unicocnt,returnPoints = False)

デフォルトでは、フラグreturnPointsTrueです。次に、返される船体には、船体ポイントまたは輪郭ポイントのピクセル座標が含まれます。通常、船体の描画、その面積、周囲長などの検索に使用されます。

ただし、これをとして指定するとFalse、返される値は等高線上のそれらの座標のインデックスになります。これは通常、convexityDefectsを見つけるために使用されます。

したがって、コードは次のようになります。

hull = cv2.convexHull(unicocnt)

例を含む詳細な説明については、の凸包のセクションをお読みくださいthis article

于 2013-02-28T17:30:50.070 に答える