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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:40:34