3
私は二つの輪郭を持つ画像を持っています。一つの輪郭は常に他の輪郭の内側にあります。私は2つの等高線の間の距離を90の異なる角度(4度毎の距離)で求めたい。それをどうやってやるの?ここで異なる角度で、2つの同心円の輪郭の間の距離を見つける方法は?
は例の画像です:
ありがとうございました!
私は二つの輪郭を持つ画像を持っています。一つの輪郭は常に他の輪郭の内側にあります。私は2つの等高線の間の距離を90の異なる角度(4度毎の距離)で求めたい。それをどうやってやるの?ここで異なる角度で、2つの同心円の輪郭の間の距離を見つける方法は?
は例の画像です:
ありがとうございました!
次のコードでは、私はちょうど垂直線の例を与えて、残りは線を回転させることによって得ることができます。結果はこのようになりますが、描画する代わりに距離計算に座標を使用することができます。
import shapely.geometry as shapgeo
import numpy as np
import cv2
img = cv2.imread('image.jpg', 0)
ret, img =cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)
#Fit the ellipses
_, contours0, hierarchy = cv2.findContours(img.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
outer_ellipse = [cv2.approxPolyDP(contours0[0], 0.1, True)]
inner_ellipse = [cv2.approxPolyDP(contours0[2], 0.1, True)]
h, w = img.shape[:2]
vis = np.zeros((h, w, 3), np.uint8)
cv2.drawContours(vis, outer_ellipse, -1, (255,0,0), 1)
cv2.drawContours(vis, inner_ellipse, -1, (0,0,255), 1)
##Extract contour of ellipses
cnt_outer = np.vstack(outer_ellipse).squeeze()
cnt_inner = np.vstack(inner_ellipse).squeeze()
#Determine centroid
M = cv2.moments(cnt_inner)
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])
print cx, cy
#Draw full segment lines
cv2.line(vis,(cx,0),(cx,w),(150,0,0),1)
# Calculate intersections using Shapely
# http://toblerity.org/shapely/manual.html
PolygonEllipse_outer= shapgeo.asLineString(cnt_outer)
PolygonEllipse_inner= shapgeo.asLineString(cnt_inner)
PolygonVerticalLine=shapgeo.LineString([(cx,0),(cx,w)])
insecouter= np.array(PolygonEllipse_outer.intersection(PolygonVerticalLine)).astype(np.int)
insecinner= np.array(PolygonEllipse_inner.intersection(PolygonVerticalLine)).astype(np.int)
cv2.line(vis,(insecouter[0,0], insecinner[1,1]),(insecouter[1,0], insecouter[1,1]),(0,255,0),2)
cv2.line(vis,(insecouter[0,0], insecinner[0,1]),(insecouter[1,0], insecouter[0,1]),(0,255,0),2)
cv2.imshow('contours', vis)
0xFF & cv2.waitKey()
cv2.destroyAllWindows()
見栄えのパッケージを見て、この答えを持っています:http://stackoverflow.com/questions/36314240/how-to-draw-a-line-from-the-centroid- 36412705#36412705 – tfv
両方の等高線の境界の座標を整然と仮定していませんか?私はしないので。私は実際にこれを尋ねる前にその答えに言及しました。私は基本的に、ある輪郭の周囲から別の輪郭の周囲までの距離を、異なる角度に対して測定したいと考えています。 –
)1.内側の輪郭を取り、重心を計算します。 2.)各角度に対して、線を作成します。 3.)各行について、他の例に示すように両方の輪郭との交差点を計算します。私は何かを見逃しましたか? – tfv