资源简介
opencv 利用摄像头来判断石头剪刀布的小游戏,代码值得一看。
代码片段和文件信息
import cv2
import numpy
import time
import random
import os
def judge():
# 构造一个3×3的结构元素
# return 0 stone 1 jiandao 2 bu
img = cv2.imread(“wif.jpg“ 0)
element = cv2.getStructuringElement(cv2.MORPH_RECT (11 11))#矩形:MORPH_RECT 交叉形:MORPH_CROSS 椭圆形:MORPH_ELLIPSE
dilate = cv2.dilate(img element)
erode = cv2.erode(img element)
# 将两幅图像相减获得边,第一个参数是膨胀后的图像,第二个参数是腐蚀后的图像
result = cv2.absdiff(dilate erode);
# 上面得到的结果是灰度图,将其二值化以便更清楚的观察结果
retval result = cv2.threshold(result 40 255 cv2.THRESH_BINARY);
# 反色,即对二值图每个像素取反
result = cv2.bitwise_not(result);
“““
python-opencv图像的位操作:图像与运算cv2.bitwise_and,图像或运算cv2.bitwise_or,图像非运算cv2.bitwise_not与图像异或运算cv2.bitwise_xor。
1)图像与运算-cv2.bitwise_and(src1 src2 dst=None mask = None)
2)图像或运算-cv2.bitwise_or(src1 src2 dst=None mask = None)
3)图像非运算-cv2.bitwise_not(src1 src2 dst=None mask = None)
图像非运算的效果:一个二值图,将黑色转为白色,白色转为黑色。
“““
result = cv2.medianBlur(result 23)
#cv2.imshow(“test“result)
“““
这里介绍非线性过滤器——中值滤波器。
由于中值滤波器对消除椒盐现象特别有用。所以我们使用第二篇教程中椒盐函数先对图像进行处理,将处理结果作为示例图片。
调用中值滤波器的方法与调用其他滤波器的方法类似,如下:
result = cv2.medianBlur(image5)
函数返回处理结果,第一个参数是待处理图像,
第二个参数是孔径的尺寸,一个大于1的奇数。
比如这里是5,中值滤波器就会使用5×5的范围来计算。即对像素的中心值及其5×5邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉。
“““
a = []
posi = []
width = []
count = 0
area = 0
#这个大神的计算方法,我一时也解析不出来,应该是依靠手势面积来计算的
for i in range(result.shape[1]):
for j in range(result.shape[0]):
if (result[j][i] == 0):
area += 1
for i in range(result.shape[1]):
if (result[5 * result.shape[0] // 16][i] == 0 and result[5 * result.shape[0] // 16][i - 1] != 0):
count += 1
width.append(0)
posi.append(i)
if (result[5 * result.shape[0] // 16][i] == 0):
width[count-1]+= 1 # 如果在这里报错,是因为背景问题,请让手的背景尽量整洁
#这里是调试用的代码可以注释掉
print (‘the pic width is ‘result.shape[1]‘\n‘)
for i in range(count):
print (‘the ‘i‘th‘‘ ‘‘is‘)
print (‘width ‘width[i] )
print (‘posi ‘posi[i]‘\n‘)
print (count‘\n‘)
print (‘area is ‘area‘\n‘)
cv2.line(result(05*result.shape[0]//16)(2145*result.shape[0]//16)(000))
cv2.namedWindow(“test“)
cv2.imshow(“test“result)
cv2.waitKey(0)
#这里是调试用的代码可以注释掉
# 判定时间
width_length = 0
width_jiandao = True
for i in range(count):
if width[i] > 45:
# print ‘bu1‘;
return 2;
if width[i] <= 20 or width[i] >= 40:
width_jiandao = False
width_length += width[i]
if width_jiandao == True and count == 2:
return 1;
if (area < 8500):
print (‘shi tou‘)
return 0;
print(“width_leng“ width_length)
if (width_length < 35):
# 这个时候说明照片是偏下的,所以需要重新测定。
a = []
相关资源
- 基于PYTHON+OPENCV的SIFT SURF图像特征匹配
- pycharm工程python调用OpenCV实现USB摄像头
- 基于opencv绘制图片的三维空间显示图
- 全景图像拼接python+opencv
- python 利用OpenCV 图像黑白化
- python-opencv 机器视觉 质心,形心 坐标
- 安装步骤。提取码也在里面
- BM3D去噪python代码
- python+opencv鼠标选择目标自动跟踪,
- 工训物流小车颜色及二维码识别
- Python+OpenCv实现AI人脸识别身份认证系
- 智能小车视觉巡线python代码
- python简易jpeg编码
- 树莓派利用python、opencv、PyALPR识别车
- 人脸识别UI Pythone+pyq5+opencv 多线程模式
- 基于Python的双路视频传输及双显示系
- python调用opencv实现人脸识别的简单D
- 树莓派小车物体追踪
- OpenCV动作识别
- 基于OpenCV的python颜色提取
- 火焰检测代码python
- python,Opencv实现的车牌识别定位及分
- python+opencv实现初步手势识别源码(本
- opencv实时识别指定物体
- OpenCV 3.x with Python By Example 2nd .txt
- 基于Python-opencv的车牌识别
- 基于OpenCV SIFT的指纹识别算法 python实
- Python+OpenCV实现Selective Search算法
- python opencv 图片去噪
- Python+OpenCV实现行人检测含配置说明
评论
共有 条评论