使用OpenCV Python获取椭圆包围区域的像素坐标与像素值
获取OpenCV图像中椭圆边界及内部的像素坐标与像素值
实现思路
核心思路是利用**掩码(mask)**标记椭圆区域:先创建和原图像尺寸一致的空白掩码,在掩码上绘制填充的椭圆,再通过掩码筛选出椭圆区域的所有像素,最后提取对应坐标和像素值。
完整代码示例
import cv2 import numpy as np def get_ellipse_pixels(image, center, axes, angle): # 创建与原图像同尺寸的空白掩码(单通道) mask = np.zeros(image.shape[:2], dtype=np.uint8) # 在掩码上绘制填充的椭圆(白色,255表示椭圆区域) cv2.ellipse(mask, center, axes, angle, 0, 360, 255, thickness=-1) # 获取椭圆区域所有非零像素的坐标(注意:返回的是(y, x)格式) y_coords, x_coords = np.where(mask == 255) pixel_coords = np.column_stack((x_coords, y_coords)) # 转换为(x, y)格式的坐标数组 # 提取对应坐标的像素值 pixel_values = image[y_coords, x_coords] return pixel_coords, pixel_values # 测试示例 if __name__ == "__main__": # 读取图像(替换为你的图像路径) img = cv2.imread("test_image.jpg") # 定义椭圆参数:中心(x,y),长轴短轴长度,旋转角度 ellipse_center = (200, 200) ellipse_axes = (100, 50) ellipse_angle = 45 coords, values = get_ellipse_pixels(img, ellipse_center, ellipse_axes, ellipse_angle) # 输出结果示例 print("椭圆区域像素坐标(前5个):\n", coords[:5]) print("对应像素值(前5个):\n", values[:5])
关键步骤说明
- 掩码创建:
np.zeros(image.shape[:2], dtype=np.uint8)生成和原图像高度、宽度一致的黑色掩码,确保覆盖整个图像范围。 - 绘制填充椭圆:调用
cv2.ellipse时设置thickness=-1,表示绘制填充的椭圆,掩码中椭圆区域会被标记为255(白色)。 - 提取坐标:
np.where(mask == 255)返回掩码中所有非零像素的行(y)和列(x)索引,再通过column_stack组合成(x,y)格式的坐标数组,符合日常像素坐标习惯。 - 提取像素值:利用numpy的索引特性,直接通过
image[y_coords, x_coords]提取对应位置的像素值,支持单通道灰度图和多通道彩色图。
注意事项
- 椭圆参数的
center是(x, y)格式,axes是(长轴半径, 短轴半径),angle是旋转角度(顺时针方向,单位为度),和cv2.ellipse的参数要求一致。 - 如果处理的是彩色图像,
pixel_values会是三维数组(每个元素是BGR通道的数值),灰度图则是一维数组。
内容的提问来源于stack exchange,提问作者BeginnersMindTruly
相关产品推荐
相关产品推荐

