在OpenCV中,要计算轮廓的非零像素数量,您可以使用cv2.findContours()
函数来找到轮廓,然后使用cv2.drawContours()
函数来绘制轮廓并计算非零像素
import cv2
import numpy as np
image = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # 用灰度模式读取图像
_, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) # 二值化
contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 找到轮廓
方法一:使用cv2.countNonZero()
函数:
non_zero_pixels = cv2.countNonZero(binary_image)
print(f"非零像素数量 (方法一): {non_zero_pixels}")
方法二:使用np.count_nonzero()
函数:
non_zero_pixels = np.count_nonzero(binary_image)
print(f"非零像素数量 (方法二): {non_zero_pixels}")
请注意,这两种方法都计算整个二值图像中的非零像素数量。如果您希望计算特定轮廓内的非零像素数量,可以使用cv2.drawContours()
函数在原始图像或二值图像上绘制轮廓,然后计算区域内非零像素。
例如:
# 在二值图像上绘制轮廓
contour_image = np.zeros_like(binary_image)
cv2.drawContours(contour_image, contours, -1, color=255, thickness=cv2.FILLED)
# 计算轮廓内非零像素数量
non_zero_pixels_in_contour = cv2.countNonZero(contour_image)
print(f"轮廓内的非零像素数量: {non_zero_pixels_in_contour}")
这样,您就可以计算轮廓内的非零像素数量。
领取专属 10元无门槛券
手把手带您无忧上云