【问题标题】:How can I accurately calculate the surface area from a binary picture in Python?如何从 Python 中的二进制图片准确计算表面积?
【发布时间】:2021-02-17 13:49:10
【问题描述】:

我有一张图像被分成了三个部分like this,我打算从每个部分中找出表面积以进行进一步计算。

我尝试使用cv2.findCountourscv.2drawContours 找到它的边界,但是当我使用cv2.contourArea 计算表面积时,输出值总是显示0,0。

例如这个part我正在使用

cr_midfoot = cv2.imread('cr_midfoot.png')

m_edged = cv2.Canny(cr_midfoot, 30, 200)
m_edged.copy()
contours_m, hierarchy_m = cv2.findContours(m_edged, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

cont_midfoot = cv2.drawContours(cr_midfoot, contours_m, -1, (0, 255, 0), 3)
midfoot_area = cv2.contourArea(contours_m[0])
cv2.imshow('contour midfoot', cont_midfoot)
print(midfoot_area)

但是我找不到我需要的信息,有什么办法吗?我正在使用 OpenCV 和 Numpy。

【问题讨论】:

  • 为什么不只计算白色像素?
  • 对不起,我是 python 新手,我如何计算白色像素?
  • 你可以很容易地通过搜索找到答案,例如opencv 计数白色像素
  • 在黑色背景上绘制白色填充轮廓。然后要么获取轮廓区域,要么使用 np.count_nonzero()。见numpy.org/doc/stable/reference/generated/…

标签: python python-3.x numpy opencv image-processing


【解决方案1】:

您可以只在所需图像上使用np.sum(),这将为您提供白色区域(因为白色是1,黑色是0)。如果您需要黑色区域 - 请使用 cv2.bitwise_not(img) 然后总结。

cr_midfoot = cv2.imread('cr_midfoot.png')
cr_midfoot_gray= cv2.cvtColor(cr_midfoot , cv2.COLOR_BGR2GRAY)
m_edged = cv2.Canny(cr_midfoot, 30, 200)
white_area  = np.sum(m_edged)

干杯。

【讨论】:

    猜你喜欢
    • 2021-06-25
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 2014-11-10
    • 1970-01-01
    • 2018-05-19
    相关资源
    最近更新 更多