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

如何用Python+OpenCV检测图像中的游戏卡牌?

游戏卡牌检测的OpenCV预处理通用方案问题

我正在开发一个游戏卡牌检测项目,第一步需要接收图像并识别其中所有游戏卡牌。目前使用Python的OpenCV实现,但这套方案仅在部分样本上有效,无法适配所有场景。

我明白图像预处理是让计算机更容易检测卡牌的关键,常规步骤包括转换为二值图、查找轮廓,但不同图像需要的预处理参数和步骤差异很大,至今没找到通用的处理方法。

以下是我当前用于查找轮廓的代码:

image = cv2.imread(<IMAGE_PATH>)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (3, 3), 0)
edged = cv2.Canny(blurred, 10, 250)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
dilate = cv2.dilate(edged, kernel, iterations=2)
contours, _ = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

样本处理效果

有效示例

  • 原始RGB图像:Good Original RGB Image
  • 处理后的dilate图像:Good dilate image

无效示例

  • 原始RGB图像:Bad original RGB image
  • 处理后的dilate图像:Bad dilate image

可以看到,无效示例中卡牌的轮廓断裂、不闭合,导致cv2.findContours无法正确识别所有卡牌。

请问有什么解决思路?无效示例中的卡牌在人眼中十分明显,因此我相信存在简单的方法让计算机也能识别它们。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:50:21