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:
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)
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()
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达本期我们将一起学习如何使用计算机视觉技术识别棋子及其在棋盘上的位置我们利用计算机视觉技术和卷积神经网...
2、test2:多张图片检测,输出顺序
运行 21_0629_opencv_python_weiqi_test2.py
前提是screen文件夹里的原始图像是按照顺序从1、2、3…排列的。
因为是学习测试阶段.为了让opencv的霍夫变换识别 过程更直观一些.我们让它把识别到的线直接在图上画出来.(这也是我之前看别人代码和配图困惑的地方,配的图能直接在被识别的图上画线,而代码却没有体现如何画的),如何画呢?中国象棋棋盘有横的线和竖的线(也还有斜的线--士走的那个叉线).由横线和竖线连起来看,它可以理解为一个表格.所以这节也可以说是中国象棋棋盘表格的识别.总体思路就是通过霍夫变换(HoughLines)从棋盘抓图中获取线段出来.过滤掉斜线.和一些挨得过近识别到的重叠的线.。直接边沿检测也OK。
最近在做一个围棋棋盘棋子识别项目,这是该项目第二篇,第一篇见:1、基于python及图像识别的围棋棋盘棋子识别1——定位棋盘位置
基于python及图像识别的围棋棋盘棋子识别2——定位棋子位置及识别棋子颜色1、将棋盘分割成19x19的小方格2、根据像素占比识别是否是黑色棋子3、根据像素占比识别是否是白色棋子4、将棋盘棋子位置通过列表表示
这一篇主要实现定位棋子位置及识别棋子颜色。
围棋棋盘原图如下:
经过上一章节处理,已经将棋盘位置找到,如下图:
现在根据新图,进行棋子位置的定位
1、将棋盘分割成1
前言“吃子”是围棋最基本的规则之一,但在编写围棋游戏要如何实现?深度优先搜索可以解决这个问题。本文分享的是个人使用深度优先搜索算法及python语言实现“吃子”的围棋程序,文章中提到的部分词语并不是围棋的专业术语,只是个人理解的表达,有不妥的地方欢迎批评指正。以下是本篇文章的正文内容,仅供参考一、“吃子”和“气”1.“吃子”和“气”的概念围棋中,假设己方棋子把对方棋子的“气”全部围住后可以把对方的...
1. 开始前本程序基于tkinter生成GUI,使用前请确保已经安装好tkinter对于windows用户,您可能已经安装了tkinter,cmd中输入python -c 'import tkinter',如果没有出错则已安装tkinter对于linux用户,您可能未安装tkinter,使用包管理工具搜索tkinter,如:apt search tkinter,pacman -Ss tkinter...
01. 数据
我们对该项目的数据集有很高的要求,因为它最终会影响我们的实验结果。我们在网上能找到的国际象棋数据集是使用不同的国际象棋集、不同的摄影机拍摄得到的,这导致我们创建了自己的数据集。我使用
在之前的课程中,我一直提到棋类游戏的棋盘模型用一维数组最好,井字棋游戏里用了一次,这一课再用一次。这一次要说的可是大名鼎鼎的“Warren Smith 棋盘模型”,很多棋类游戏都使用的是这个棋盘模型,或者是其衍生出来的改进模型。奥赛罗棋的估值算法有很多种,这一课我们也介绍一种简单的估值算法,为了提高搜索算法的效率,需多棋类游戏都使用空位链表技术,避免在整个棋盘上盲目地搜索,这一课将介绍如何组...
如何在两秒钟内评估国际象棋位置的指南经常在 https://lichess.org/ 上观看大师们玩的国际象棋比赛。这些棋局和棋手的水平超出了我们的想象,如果想知道谁有优势。与其事后分析游戏,不如实时分析它们。下面的 Python 程序针对 https://lichess.org/ 进行了优化。但是你可以为 https://www.chess.com/ 或任何国际象棋网站...