书名:计算机视觉40例从入门到深度学习:OpenCV-Python
作者:李立宗
出版社:电子工业出版社
出版时间:2022-07-01
ISBN:9787121436857
一、石头、剪刀、布的识别
- 通过形状匹配识别石头、剪刀、布手势。
-
手势识别范例如图8-10所示,在识别手势时,将待识别手势与已知形状的手势模型的相似度匹配值作为判断依据,待识别手势与哪个手势模型最相似就将结果识别为哪个手势模型对应的手势。
图8-10 手势识别范例
二、程序实现
import cv2
def reg(x):
# --------------读取并绘制原始图像------------------
o1 = cv2.imread('d:\\OpenCVpic\\paper.jpg')
o2 = cv2.imread('d:\\OpenCVpic\\rock.jpg')
o3 = cv2.imread('d:\\OpenCVpic\\sessiors.jpg')
# --------------提取轮廓------------------
gray1 = cv2.cvtColor(o1,cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(o2,cv2.COLOR_BGR2GRAY)
gray3 = cv2.cvtColor(o3,cv2.COLOR_BGR2GRAY)
xgray = cv2.cvtColor(x,cv2.COLOR_BGR2GRAY)
ret, binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY)
ret, binary2 = cv2.threshold(gray2,127,255,cv2.THRESH_BINARY)
ret, binary3 = cv2.threshold(gray3,127,255,cv2.THRESH_BINARY)
ret, xbinary = cv2.threshold(xgray,127,255,cv2.THRESH_BINARY)
contours1, hierarchy = cv2.findContours(binary1, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
contours2, hierarchy = cv2.findContours(binary2, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
contours3, hierarchy = cv2.findContours(binary3, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
xcontours, hierarchy = cv2.findContours(xbinary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnt1=contours1[0]
cnt2=contours2[0]
cnt3=contours3[0]
x=xcontours[0]
ret=[]
ret.append(cv2.matchShapes(x,cnt1,1,0.0))
ret.append(cv2.matchShapes(x,cnt2,1,0.0))
ret.append(cv2.matchShapes(x,cnt3,1,0.0))
max_index=ret.index(min(ret))
if max_index==0:
r="paper"
elif max_index==1:
r="rock"
else:
r="sessiors"
return r
t1 = cv2.imread('d:\\OpenCVpic\\test1.jpg')
t2 = cv2.imread('d:\\OpenCVpic\\test2.jpg')
t3 = cv2.imread('d:\\OpenCVpic\\test3.jpg')
# ====设置与显示识别结果相关的参数=======
org=(0,60)
font = cv2.FONT_HERSHEY_PLAIN
fontScale=2
color=(0,0,255)
thickness=3
# ====显示识别结果======
cv2.putText(t1,reg(t1),org,font,fontScale,color,thickness)
cv2.putText(t2,reg(t2),org,font,fontScale,color,thickness)
cv2.putText(t3,reg(t3),org,font,fontScale,color,thickness)
cv2.imshow('test1',t1)
cv2.imshow('test2',t2)
cv2.imshow('test3',t3)
cv2.waitKey()
cv2.destroyAllWindows()
![](https://img.haomeiwen.com/i17748967/6b12268c15f8f050.png)
网友评论