2013年03月03日 星期日 13:09
x,y为一维数组
用cv2函数的代码为:
plt.plot(x,y)
plt.savefig('1.png')
img = cv2.imread('1.png')
retval,dst = cv2.threshold(img,120,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(dst,cv2.RETR_EXTERANL,cv2.CHAIN_APPROX_SIMPLE)
print cv2.contourArea(contours[0],False)
用cv函数的代码为:
m = np.c_[x,y].reshape(1,-1,2).copy()
print cv.contourArea(cv.asMat(m))
计算外轮廓的面积值,两个函数得出的值相差很大(cv2:0.004,cv:0.129) ,哪里有错?
2013年03月05日 星期二 06:18
你都知道轮廓上各点的坐标(x, y)了,直接计算其面积就好了。
>>> from shapely.geometry import Polygon >>> polygon = Polygon([(0, 0), (1, 1), (1, 0)]) >>> polygon.area 0.5 >>> polygon.length 3.4142135623730949
2013年05月21日 星期二 17:12
因为x,y数据点画出的图很杂乱,画出的曲线图如下
x=[-0.005 .002 0.003 0.0065 0.007 0.0035 -0.001 -0.0005 0.005
0.0115 0.0155 0.0105 0.003 0.0015 0.0035 0.007 0.0075 0.004
-0.002 -0.0055 0.0005 0.006 0.002 -0.0095 -0.0175 -0.023 -0.0255
-0.0175 -0.009 -0.0085 -0.0095 -0.007 -0.0035 0.001 0.0045 0.006
0.006 0.0025 -0.0005 0.002 0.008 0.011 0.0085 0.004 -0.0005
0. 0.0045 0.0085 0.009 0.0055 0.0005 -0.0015 0.0025 0.0065
0.005 0.0005 -0.002 0. 0.003 0.004 ]
y=[ 0.007 0.0015 -0.008 -0.01295 -0.00725 0.00335 0.00875 0.0066
-0.0015 -0.00845 -0.00615 0.00595 0.01465 0.012 0.0015 -0.0035
0.0015 0.009 0.015 0.0125 0.003 -0.002 0. 0.0065
0.012 0.008 -0.003 -0.0145 -0.015 -0.0045 0.003 0.0025
-0.007 -0.0175 -0.0175 -0.0065 0.004 0.003 -0.0065 -0.01715
-0.0131 0.0032 0.0087 0.0014 -0.00885 -0.01315 -0.00735 0.00205
0.00785 0.0052 -0.00575 -0.01085 -0.0052 0.0043 0.00845 0.00115
-0.00975 -0.01255 -0.00535 0.0001 ]
就是想得到最外边轮廓所包围的大小,外边更圆滑的绿色曲线是对蓝色线插值后画出的。而用Polygon函数计算出的大小与cv函数的值相差很大,(其中,Polygon函数默认最后一个连接到第一个),前者为0.001154925,后者为0.00035.能否得到最外边界点的坐标值,再用Polygon函数计算?焦急( ⊙ o ⊙ )!
2013年05月21日 星期二 19:22
请参考下面的链接,使用未插值数据计算面积,关键部分是调用buffer(0)函数:
https://www.wakari.io/sharing/bundle/ruoyu0088/shapely_test
面积为
0.000741
2013年05月22日 星期三 22:33
非常感谢若愚大哥,在参考链接计算其他数据后,在调用buffer(0)函数后出现了MultiPlygon,而该类型无exterior属性,画图时候不考虑行么?谢谢!
2013年05月23日 星期四 06:32
MultiPolygon是多个Polygon的组合,你找找相关的方法。
2013年06月05日 星期三 15:14
参考了链接计算后,Polygon.area:2.0737125 ,而p=Polygon.buffer(0).area:0.2243462。
polygon.area:0.00240625, Polygon.buffer(0).area:0.009072367
算出的值相差还挺大,还没找出解决方法。
2013年06月05日 星期三 20:08
在下面的链接中给出了解答:
http://hyry.dip.jp/tech/forum/thread.html/970
结果如下:
Zeuux © 2024
京ICP备05028076号