您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python识别围棋定位棋盘位置

51自学网 2021-10-30 22:25:09
  python
这篇教程python识别围棋定位棋盘位置写得很实用,希望能帮到您。

最近需要做一个围棋识别的项目,首先要将棋盘位置定位出来,效果图如下:

效果图

原图

在这里插入图片描述

中间处理效果

在这里插入图片描述

最终结果

在这里插入图片描述

思路分析

我们利用python opencv的相关函数进行操作实现,根据棋盘颜色的特征,寻找到相关特征,将棋盘区域抠出来。最好从原始图像中将棋盘位置截取出来。

源码:定位棋盘位置

from PIL import ImageGrabimport numpy as npimport cv2from glob import globimglist = sorted(glob("screen/*.jpg"))for i in imglist:# while 1:    img = cv2.imread(i)    image = img.copy()    w,h,c = img.shape    img2 =  np.zeros((w,h,c), np.uint8)    img3 =  np.zeros((w,h,c), np.uint8)    # img = ImageGrab.grab() #bbox specifies specific region (bbox= x,y,width,height *starts top-left)        hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)    lower = np.array([10,0,0])    upper = np.array([40,255,255])    mask = cv2.inRange(hsv,lower,upper)    erodeim = cv2.erode(mask,None,iterations=2)  # 腐蚀     dilateim = cv2.dilate(erodeim,None,iterations=2)     img = cv2.bitwise_and(img,img,mask=dilateim)    frame = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    ret, dst = cv2.threshold(frame, 100, 255, cv2.THRESH_BINARY)    contours,hierarchy = cv2.findContours(dst, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)    cv2.imshow("0",img)    i = 0    maxarea = 0    nextarea = 0    maxint = 0    for c in contours:        if cv2.contourArea(c)>maxarea:            maxarea = cv2.contourArea(c)            maxint = i        i+=1    #多边形拟合    epsilon = 0.02*cv2.arcLength(contours[maxint],True)    if epsilon<1:        continue        #多边形拟合    approx = cv2.approxPolyDP(contours[maxint],epsilon,True)    [[x1,y1]] = approx[0]    [[x2,y2]] = approx[2]    checkerboard = image[y1:y2,x1:x2]    cv2.imshow("1",checkerboard)    cv2.waitKey(1000)cv2.destroyAllWindows()

带保存图像

from PIL import ImageGrabimport numpy as npimport cv2from glob import globimport osimglist = sorted(glob("screen/*.jpg"))a=0for i in imglist:# while 1:    a=a+1    img = cv2.imread(i)    image = img.copy()    w,h,c = img.shape    img2 =  np.zeros((w,h,c), np.uint8)    img3 =  np.zeros((w,h,c), np.uint8)    # img = ImageGrab.grab() #bbox specifies specific region (bbox= x,y,width,height *starts top-left)        hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)    lower = np.array([10,0,0])    upper = np.array([40,255,255])    mask = cv2.inRange(hsv,lower,upper)    erodeim = cv2.erode(mask,None,iterations=2)  # 腐蚀     dilateim = cv2.dilate(erodeim,None,iterations=2)     img = cv2.bitwise_and(img,img,mask=dilateim)    frame = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    ret, dst = cv2.threshold(frame, 100, 255, cv2.THRESH_BINARY)    contours,hierarchy = cv2.findContours(dst, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)    # 保存图片的地址    img_file_1 = "./temp"    # 确认上述地址是否存在    if not os.path.exists(img_file_1):        os.mkdir(img_file_1)    cv2.imshow("0",img)    cv2.imwrite(img_file_1 + "/" + 'temp_%d.jpg'%a, img)    i = 0    maxarea = 0    nextarea = 0    maxint = 0    for c in contours:        if cv2.contourArea(c)>maxarea:            maxarea = cv2.contourArea(c)            maxint = i        i+=1    #多边形拟合    epsilon = 0.02*cv2.arcLength(contours[maxint],True)    if epsilon<1:        continue        #多边形拟合    approx = cv2.approxPolyDP(contours[maxint],epsilon,True)    [[x1,y1]] = approx[0]    [[x2,y2]] = approx[2]    checkerboard = image[y1:y2,x1:x2]    cv2.imshow("1",checkerboard)    cv2.waitKey(1000)    # 保存图片的地址    img_file_2 = "./checkerboard"    # 确认上述地址是否存在    if not os.path.exists(img_file_2):        os.mkdir(img_file_2)    cv2.imwrite(img_file_2 + "/" + 'checkerboard_%d.jpg'%a, checkerboard)cv2.destroyAllWindows()

到此这篇关于python识别围棋定位棋盘位置的文章就介绍到这了,更多相关python 围棋定位棋盘位置内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


python之基数排序的实现
Python 处理表格进行成绩排序的操作代码
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。