Python和科学计算认证群组  - 讨论区

标题:opencv 轮廓面积 cv2 与cv 求出面积值大小不一样

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哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号