• 售前

  • 售后

热门帖子
入门百科

python辨认围棋定位棋盘位置

[复制链接]
敢想敢做敢拼 显示全部楼层 发表于 2021-8-14 13:13:34 |阅读模式 打印 上一主题 下一主题
目录


  • 结果图
  • 思路分析
  • 源码:定位棋盘位置
迩来须要做一个围棋辨认的项目,起首要将棋盘位置定位出来,结果图如下:

结果图

原图

中心处置处罚结果

终极结果


思路分析

我们使用python opencv的干系函数举行操作实现,根据棋盘颜色的特征,探求到干系特征,将棋盘地区抠出来。最好从原始图像中将棋盘位置截取出来。

源码:定位棋盘位置
  1. from PIL import ImageGrab
  2. import numpy as np
  3. import cv2
  4. from glob import glob
  5. imglist = sorted(glob("screen/*.jpg"))
  6. for i in imglist:
  7. # while 1:
  8.     img = cv2.imread(i)
  9.     image = img.copy()
  10.     w,h,c = img.shape
  11.     img2 =  np.zeros((w,h,c), np.uint8)
  12.     img3 =  np.zeros((w,h,c), np.uint8)
  13.     # img = ImageGrab.grab() #bbox specifies specific region (bbox= x,y,width,height *starts top-left)
  14.    
  15.     hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
  16.     lower = np.array([10,0,0])
  17.     upper = np.array([40,255,255])
  18.     mask = cv2.inRange(hsv,lower,upper)
  19.     erodeim = cv2.erode(mask,None,iterations=2)  # 腐蚀
  20.     dilateim = cv2.dilate(erodeim,None,iterations=2)
  21.     img = cv2.bitwise_and(img,img,mask=dilateim)
  22.     frame = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  23.     ret, dst = cv2.threshold(frame, 100, 255, cv2.THRESH_BINARY)
  24.     contours,hierarchy = cv2.findContours(dst, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
  25.     cv2.imshow("0",img)
  26.     i = 0
  27.     maxarea = 0
  28.     nextarea = 0
  29.     maxint = 0
  30.     for c in contours:
  31.         if cv2.contourArea(c)>maxarea:
  32.             maxarea = cv2.contourArea(c)
  33.             maxint = i
  34.         i+=1
  35.     #多边形拟合
  36.     epsilon = 0.02*cv2.arcLength(contours[maxint],True)
  37.     if epsilon<1:
  38.         continue
  39.    
  40.     #多边形拟合
  41.     approx = cv2.approxPolyDP(contours[maxint],epsilon,True)
  42.     [[x1,y1]] = approx[0]
  43.     [[x2,y2]] = approx[2]
  44.     checkerboard = image[y1:y2,x1:x2]
  45.     cv2.imshow("1",checkerboard)
  46.     cv2.waitKey(1000)
  47. cv2.destroyAllWindows()
复制代码
带保存图像
  1. from PIL import ImageGrab
  2. import numpy as np
  3. import cv2
  4. from glob import glob
  5. import os
  6. imglist = sorted(glob("screen/*.jpg"))
  7. a=0
  8. for i in imglist:
  9. # while 1:
  10.     a=a+1
  11.     img = cv2.imread(i)
  12.     image = img.copy()
  13.     w,h,c = img.shape
  14.     img2 =  np.zeros((w,h,c), np.uint8)
  15.     img3 =  np.zeros((w,h,c), np.uint8)
  16.     # img = ImageGrab.grab() #bbox specifies specific region (bbox= x,y,width,height *starts top-left)
  17.    
  18.     hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
  19.     lower = np.array([10,0,0])
  20.     upper = np.array([40,255,255])
  21.     mask = cv2.inRange(hsv,lower,upper)
  22.     erodeim = cv2.erode(mask,None,iterations=2)  # 腐蚀
  23.     dilateim = cv2.dilate(erodeim,None,iterations=2)
  24.     img = cv2.bitwise_and(img,img,mask=dilateim)
  25.     frame = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  26.     ret, dst = cv2.threshold(frame, 100, 255, cv2.THRESH_BINARY)
  27.     contours,hierarchy = cv2.findContours(dst, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
  28.     # 保存图片的地址
  29.     img_file_1 = "./temp"
  30.     # 确认上述地址是否存在
  31.     if not os.path.exists(img_file_1):
  32.         os.mkdir(img_file_1)
  33.     cv2.imshow("0",img)
  34.     cv2.imwrite(img_file_1 + "/" + 'temp_%d.jpg'%a, img)
  35.     i = 0
  36.     maxarea = 0
  37.     nextarea = 0
  38.     maxint = 0
  39.     for c in contours:
  40.         if cv2.contourArea(c)>maxarea:
  41.             maxarea = cv2.contourArea(c)
  42.             maxint = i
  43.         i+=1
  44.     #多边形拟合
  45.     epsilon = 0.02*cv2.arcLength(contours[maxint],True)
  46.     if epsilon<1:
  47.         continue
  48.    
  49.     #多边形拟合
  50.     approx = cv2.approxPolyDP(contours[maxint],epsilon,True)
  51.     [[x1,y1]] = approx[0]
  52.     [[x2,y2]] = approx[2]
  53.     checkerboard = image[y1:y2,x1:x2]
  54.     cv2.imshow("1",checkerboard)
  55.     cv2.waitKey(1000)
  56.     # 保存图片的地址
  57.     img_file_2 = "./checkerboard"
  58.     # 确认上述地址是否存在
  59.     if not os.path.exists(img_file_2):
  60.         os.mkdir(img_file_2)
  61.     cv2.imwrite(img_file_2 + "/" + 'checkerboard_%d.jpg'%a, checkerboard)
  62. cv2.destroyAllWindows()
复制代码
到此这篇关于python辨认围棋定位棋盘位置的文章就先容到这了,更多干系python 围棋定位棋盘位置内容请搜刮草根技术分享从前的文章或继续欣赏下面的干系文章希望大家以后多多支持草根技术分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作