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

如何利用含board、liquid两类的二值掩码计算烤盘板的像素长度

计算烤盘板的像素长度方案

核心思路

用cv2.fitEllipse拟合椭圆后,椭圆参数里的长轴长度就是板的像素长度,关键是先准确提取board类的轮廓,再解析椭圆参数。

具体步骤

  • 提取board专属掩码:从二值掩码中分离出仅包含board的区域(比如假设board对应的灰度值为255,liquid为0,可根据实际掩码调整)。
  • 提取board轮廓:用cv2.findContours提取board区域的轮廓,建议用cv2.RETR_EXTERNAL只取最外层轮廓,避免内部干扰;再用cv2.contourArea过滤掉小的噪声轮廓。
  • 拟合椭圆并解析参数:对board的轮廓用cv2.fitEllipse拟合,返回的元组格式为((中心x, 中心y), (长轴长度, 短轴长度), 旋转角度),其中第二个元素的第一个值就是板的像素长度(如果长轴方向与板的延伸方向不符,取第二个值即可)。

代码示例

import cv2
import numpy as np

# 读取二值掩码图(假设board为255,liquid为0)
mask = cv2.imread('board_liquid_mask.png', cv2.IMREAD_GRAYSCALE)
# 提取board区域
board_mask = np.where(mask == 255, 255, 0).astype(np.uint8)

# 提取board轮廓
contours, _ = cv2.findContours(board_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 过滤小轮廓,只保留最大的(board的轮廓)
board_contour = max(contours, key=cv2.contourArea)

# 拟合椭圆
ellipse = cv2.fitEllipse(board_contour)
# 解析椭圆参数:长轴长度即为板的像素长度
board_length = ellipse[1][0]
# 如果短轴才是实际板的长度,就取ellipse[1][1]

print(f"板的像素长度:{board_length}")

注意事项

  • 如果拟合的椭圆不符合预期,检查轮廓是否正确提取:比如是否有断开的轮廓,可先对board_mask做一次cv2.morphologyEx膨胀操作,连接断裂区域。
  • 若板是近似矩形,也可以用cv2.minAreaRect拟合旋转矩形,取矩形的长边长作为长度,可能更贴合实际形状。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:51:34