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.shapeimg2 =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 = 0maxarea = 0nextarea = 0maxint = 0for c in contours:if cv2.contourArea(c)>maxarea:maxarea = cv2.contourArea(c)maxint = ii+=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+1img = cv2.imread(i)image = img.copy()w,h,c = img.shapeimg2 =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 = 0maxarea = 0nextarea = 0maxint = 0for c in contours:if cv2.contourArea(c)>maxarea:maxarea = cv2.contourArea(c)maxint = ii+=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识别围棋定位棋盘位置的文章就介绍到这了,更多相关python 围棋定位棋盘位置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- 人脸识别|【人脸识别系列】| 实现自动化妆
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)