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

如何用Python识别图片中六边形刻度计分卡并转换为数据集?

用Python实现六边形刻度计分卡识别完全可行

明确说:完全可以用Python实现这个需求,核心依托OpenCV完成图像预处理与形状检测,搭配numpy处理数据,最终能把识别出的分数整理成CSV、JSON等标准数据集格式。

先修复你当前的OpenCV代码问题

你这段代码的报错根源有两个:

  1. cv2.threshold返回值处理错误:该函数会返回两个值——阈值(ret)和二值化后的图像(thresh_img),你直接把返回值赋值给thresh,导致后续传给findContours的不是合法图像对象。
  2. cv2.findContours的返回值适配问题:OpenCV 4.x版本仅返回contours和hierarchy两个值,你当前的写法没有正确接收。

修正后的可运行代码示例:

import cv2

# 读取目标图片
img = cv2.imread("your_score_card.jpg")
# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理:正确接收两个返回值,用INV适配深色刻度场景(可根据实际调整)
ret, thresh_img = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
# 查找轮廓:适配OpenCV 4.x版本
contours, hierarchy = cv2.findContours(thresh_img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 验证:打印轮廓数量确认是否正常获取
print(f"检测到轮廓总数:{len(contours)}")

后续实现计分卡识别的核心步骤

解决轮廓问题后,可按以下流程完成分数识别与数据集存储:

  • 六边形筛选:遍历所有轮廓,用cv2.approxPolyDP做多边形逼近,筛选出边数为6的轮廓,同时通过面积、宽高比过滤掉无关干扰轮廓。
  • 刻度对应分数:定位六边形内部的刻度标记(填充块、线条等),通过计算刻度的位置、数量或状态,映射为对应分数。
  • 数据集存储:将识别出的分数与对应图片文件名等信息,用Python内置的csv或json模块写入文件,形成结构化数据集。

优化提示

  • 若原图有噪声,先通过cv2.medianBlur或cv2.GaussianBlur去噪,提升轮廓检测精度。
  • 二值化阈值可改用cv2.adaptiveThreshold,适配不同光照条件下的图片。
  • 若刻度识别难度高,可结合cv2.matchTemplate模板匹配,或用简单的KNN模型辅助分类刻度状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:44:59