You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用OpenCV获取掩码图像中圆形区域的BGR值?

如何获取OpenCV圆形掩码区域的BGR值?

你已经通过代码成功创建了圆形掩码并得到遮罩后的图像,要提取该圆形区域的BGR值,完全可以利用你已生成的circle_img掩码来直接筛选原图像的像素,下面是几种实用的实现方式:

1. 提取圆形区域内的所有BGR像素值

掩码circle_img是二值图(0代表非圆形区域,1代表圆形区域),我们可以把它转换成布尔索引,直接从原图像中提取所有圆形区域的像素:

import cv2
import numpy as np

# 你的原有代码
img = cv2.imread("car.png")
height, width, depth = img.shape
circle_img = np.zeros((height, width), np.uint8)
mask = cv2.circle(circle_img, (int(width / 2), int(height / 2)), 90, 1, thickness=-1)

# 提取圆形区域的所有BGR值
mask_bool = circle_img.astype(bool)  # 将掩码转为布尔类型,True对应圆形区域
circle_bgr_values = img[mask_bool]   # 筛选出所有圆形区域的像素,结果是(N,3)的数组,N为区域内像素数

# 打印前5个像素的BGR值示例
print("圆形区域的部分BGR像素值:")
print(circle_bgr_values[:5])

2. 计算圆形区域的平均BGR值

如果需要统计该区域的平均颜色,直接对提取到的像素数组求均值即可:

# 计算BGR三个通道的平均值
avg_bgr = circle_bgr_values.mean(axis=0)
print(f"圆形区域的平均BGR值:B={avg_bgr[0]:.2f}, G={avg_bgr[1]:.2f}, R={avg_bgr[2]:.2f}")

3. 获取圆形区域内特定点的BGR值

如果需要获取圆形内某个具体位置的BGR值(比如圆心),可以直接通过坐标索引,同时利用掩码验证该点是否在圆形区域内:

center_x = int(width / 2)
center_y = int(height / 2)

# 验证该点是否在圆形区域内(此处圆心必然在区域内,仅作演示)
if circle_img[center_y, center_x] == 1:
    center_bgr = img[center_y, center_x]
    print(f"圆心位置的BGR值:{center_bgr}")

原理说明

掩码circle_img中,值为1的像素位置正好对应我们的圆形区域,通过布尔索引img[mask_bool]可以直接筛选出原图像中所有对应位置的像素,避免了对整个图像的遍历,效率很高。

内容的提问来源于stack exchange,提问作者lucians

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:07:48