如何利用Python实现围棋的棋盘位置定位
Admin 2022-09-19 群英技术资讯 623 次浏览
原图
中间处理效果
最终结果
我们利用python opencv的相关函数进行操作实现,根据棋盘颜色的特征,寻找到相关特征,将棋盘区域抠出来。最好从原始图像中将棋盘位置截取出来。
from PIL import ImageGrab import numpy as np import cv2 from glob import glob imglist = 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 ImageGrab import numpy as np import cv2 from glob import glob import os imglist = sorted(glob("screen/*.jpg")) a=0 for 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()
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
python中递归函数怎样使用?很多新手在使用递归函数时,会出现多种问题,对此,这篇文章就给大家分享一下python中递归函数的用法以及要注意的一些问题,有需要的朋友可以参考。
之前我们也了解很多python函数,今天给大家分享的函数是os.path.join()是拼接文件路径函数,那么os.path.join()函数怎样使用呢?接下来跟随小编来学习一下吧。
这篇文章主要介绍了python中的属性管理机制,主要包括私有属性和属性限制-__slots__方法,文中详细介绍了python中如何去声明变量的相关知识,需要的朋友可以参考下
对一些新手来说python闭包和装饰器是比较难理解的内容,为帮助大家更好的理解和学习python闭包和装饰器,下面给大家介绍一些关于python闭包和装饰器的实例,需要的朋友可以参考学习。
这篇文章主要介绍了Django显示可视化图表的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008