如何使用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
相关产品推荐
相关产品推荐

