当前位置: 首页 > 知识库问答 >
问题:

计算二值阈值图像中非白色区域的表面积(python)

戎兴言
2023-03-14

有哪些可能的方法来计算图像中非白色区域/灰色/黑色斑块的表面积?我尝试了cv2.controls来获取形状,在轮廓上迭代,并使用cv2.controlscv2.arclength(contour,True)求出总面积和周长,但结果似乎与图像无关。

我也尝试在轮廓之前添加一个精明的边缘检测,但似乎仍然不太好用。

只是一个额外的上下文,我想使用表面积作为一个ML模型的特性)。

共有1个答案

秦斌
2023-03-14

您需要cv.countnonzero(img)。黑色像素的值为0,白色/灰色像素的值更大。要找到非白色像素的数量,必须在使用countNonZero()之前反转图像。

import cv2

img = cv2.imread('jwsFy.png', 0)
img = 255-img # invert image
n_black = cv2.countNonZero(img)

print("Number of dark pixels:")
print(n_black)

height, width = img.shape
n_total = height * width

print("Percentage of dark pixels:")
print(n_black / n_total * 100)
 类似资料:
  • 我有一个有多个分离的圆形区域的噪声图像是模糊的。具有六个感兴趣区域(ROI)的这种图像的示例是: 在Matlab中使用和给定的阈值很容易用全局阈值分割图像。但是我想相对于每个ROI(而不是整个图像)的最大像素值设置一个固定阈值(例如54%),来分割每个ROI。 我有一组不同ROI大小和位置的图像,我需要基于区域阈值分割来分割它们,因此我也无法使用Matlab交互工具来选择它们。 谢谢

  • 图像阈值 目标 在本教程中,您将学习简单阈值处理,自适应阈值处理,Otsu阈值处理等。 您将学习以下函数:cv2.threshold, cv2.adaptiveThreshold等。 一、单的阈值 在这里,事情是直截了当的。如果像素值大于阈值,则为其分配一个值(可以是白色),否则为其分配另一个值(可以是黑色)。使用的函数是cv2.threshold。第一个参数是源图像,它应该是灰度图像。第二个参数

  • 从原始图像中我们可以看到,我的ROI是白色的棉花圈在红色的边界中。当我分割这幅图像时,我得到了如图所示的二值图像。我们注意到,与原始图像相比,二值图像中存在一些缺失区域。因此,我要计算ROI的原始图像的像素数和二值图像中白点的像素数。这样我就可以计算ROI的实际像素和实际分割的像素数量的差异。 谢谢你。

  • 问题是我需要一个简化版本的算法,可以计算一个二值图像中几个白色轮廓的质心。例如,如果只有一个白色轮廓,则使用公式计算轮廓中心的坐标Xc和Yc: 其中M是强度m_i的和,m_i是像素强度值,x_i和y_i是像素在图像上的位置,n是像素总数。 有没有人可以建议一些类似的方法来处理几个轮廓,或者如何在计算其中一个轮廓时忽略其他的轮廓,使用相同的公式?

  • 目标 在本教程中,您将学习简单阈值,自适应阈值和Otsu阈值。 你将学习函数cv.threshold和cv.adaptiveThreshold。 简单阈值 在这里,问题直截了当。对于每个像素,应用相同的阈值。如果像素值小于阈值,则将其设置为0,否则将其设置为最大值。函数cv.threshold用于应用阈值。第一个参数是源图像,它应该是灰度图像。第二个参数是阈值,用于对像素值进行分类。第三个参数是分

  • 在OpenCV python中,假设我们用cv2.imread读取一个图像,并得到一个BGR numpy数组。接下来我们使用cv2.inrange命令生成一个掩码。掩模具有相同的宽度/高度,并且每个掩模像素要么是黑色的,要么是白色的。 我必须先将掩码转换成BGR图像吗?如果是,怎么做? 编辑:我不想像在将蒙版应用到彩色图像中那样将整个蒙版应用到图像上。另一种表达我所想要的方式:将面具视为一个黑白图