本文共 1315 字,大约阅读时间需要 4 分钟。
在OpenCV中,统计不规则形状区域中每种颜色的像素数可以通过以下步骤实现。这是一个实用且高效的解决方案,适用于图像分析和计算机视觉等领域。
首先,我们需要读取图像文件并将其转换为灰度格式,因为OpenCV的轮廓检测和颜色分析通常基于灰度图像。使用cv2.imread()函数读取图像,然后将其转换为单通道灰度图像。
import cv2import numpy as np
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE) 为了更容易检测形状,我们使用cv2.threshold()函数对图像进行全局二值化处理。这里可以选择Otsu's阈值方法,它能够自动寻找最佳阈值。
ret, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
接下来,使用cv2.findContours()函数找出图像中的所有轮廓。每个轮廓都可以通过计算其面积来获取形状的大小信息。
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
为了统计每种颜色的像素数,我们创建一个与原图大小相同的空白画布。然后遍历每个轮廓,根据轮廓的面积填充对应区域。这里假设填充颜色为白色(255)。
area_count = np.zeros((binary.shape[0], binary.shape[1]), dtype=np.uint8)
for contour in contours: cnt_area = cv2.contourArea(contour) cv2.drawContours(area_count, [contour], -1, 255, -1)
最后,使用numpy的unique()函数获取填充区域的唯一颜色列表及其对应的像素数。通过减去背景(通常为0),我们可以得到每种颜色的实际像素数。
unique_colors, counts = np.unique(area_count, return_counts=True)color_pixel_count = {color: count - 1 for color, count in zip(unique_colors, counts)} 打印颜色及其对应的像素数,方便查看和分析。
print("颜色及其对应像素数:", color_pixel_count) 这个方法简单易懂,适合处理不规则形状区域的颜色统计问题。
转载地址:http://vwpfk.baihongyu.com/