opencv实战1:扑克牌花色匹配

一.实现目标

这次实战练习希望达到的目标是匹配扑克牌上的相同花色。本文采用模式匹配的思路来进行匹配。实现效果如下图(大家可自行优化代码
在这里插入图片描述

二.选定模板

首先选取ROI,也就是要匹配花色的区域,这里我是用一个简单代码来得到区域坐标的,代码如下:

import cv2
import numpy as np

drawing=False

ix,iy=-1,-1
img=cv2.imread('pukepai.jpg')


temp_img=img.copy()#用于临时绘制
def get_point(event,x,y,flags,param):
    global ix,iy,drawing,temp_img

    if event == cv2.EVENT_LBUTTONDOWN:  # 左键按下,开始绘制
        drawing=True
        ix, iy = x, y

    elif event==cv2.EVENT_MOUSEMOVE:
        if drawing and flags==cv2.EVENT_FLAG_LBUTTON:
            temp_img=img.copy()#清楚之前的绘制,保存上一次的图像
            cv2.rectangle(img,(ix,iy),(x,y),(0,0,255),-1)
            cv2.imshow('photo',temp_img)
        
    elif event==cv2.EVENT_LBUTTONUP:
        drawing==False
        cv2.rectangle(img,(ix,iy),(x,y),(0,0,225),1)
        print(f"起始点(ix,iy):{ix,iy},结束点(x,y):{x,y}")

cv2.namedWindow("photo",0)
cv2.setMouseCallback('photo',get_point)
cv2.imshow("photo",img)
cv2.waitKey(0)
cv2.destroyAllWindows()


在这里插入图片描述

终端的输出红色感兴趣区域的坐标如下:

起始点(ix,iy):(31, 59),结束点(x,y):(64, 92)

所以可以依照此进行切片处理,选择感兴趣的区域,但是要注意坐标和切片顺序之间的关系

三.模式匹配黑桃花色

import cv2
import numpy as np
from matplotlib import pyplot as plt

#读取图像
img=cv2.imread("pukepai.jpg")
#img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#截取roi
img_cut=img[256:287,32:59]

#img_cut_gray=cv2.cvtColor(img_cut,cv2.COLOR_BGR2GRAY)#灰度

template=img_cut

w,h,COLOR=template.shape

threshold=0.9

res=cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)

loc=np.where(res>=threshold)

for pt in zip(*loc[::-1]):
    cv2.rectangle(img,pt,(pt[0]+w,pt[1]+h),(0,0,255),2)

#展示
cv2.imshow("pu_ke_pai",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

四.总结

通过增加一个大点的模板相信也可以匹配出中间大的黑桃,再多一个倒置的模版,相信也可以匹配出倒置的黑桃,读者可以自己尝试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值