如何用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图像:

- 处理后的dilate图像:

无效示例
- 原始RGB图像:

- 处理后的dilate图像:

可以看到,无效示例中卡牌的轮廓断裂、不闭合,导致cv2.findContours无法正确识别所有卡牌。
请问有什么解决思路?无效示例中的卡牌在人眼中十分明显,因此我相信存在简单的方法让计算机也能识别它们。
内容的提问来源于stack exchange,提问作者ryden
相关产品推荐
相关产品推荐

