Python基于分水岭算法解决走迷宫游戏示例
作者:白交_Robin 时间:2021-08-04 17:41:37
本文实例讲述了Python基于分水岭算法解决走迷宫游戏。分享给大家供大家参考,具体如下:
#Solving maze with morphological transformation
"""
usage:Solving maze with morphological transformation
needed module:cv2/numpy/sys
ref:
1.http://www.mazegenerator.net/
2.http://blog.leanote.com/post/leeyoung/539a629aab35bc44e2000000
@author:Robin Chen
"""
import cv2
import numpy as np
import sys
def SolvingMaze(image):
#load an image
try:
img = cv2.imread(image)
except Exception,e:
print 'Error:can not open the image!'
sys.exit()
#show image
#cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('maze_image',img)
#convert to gray
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#show gray image
#cv2.imshow('gray_image',gray_image)
#convert to binary image
retval,binary_image = cv2.threshold(gray_image, 10,255, cv2.THRESH_BINARY_INV)
#cv2.imshow('binary_image',binary_image)
contours,hierarchy = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
if len(contours) != 2:
sys.exit("This is not a 'perfect maze' with just 2 walls!")
h, w, d = img.shape
#The first wall
path = np.zeros((h,w),dtype = np.uint8)#cv2.CV_8UC1
cv2.drawContours(path, contours, 0, (255,255,255),-1)#cv2.FILLED
#cv2.imshow('The first wall',path)
#Dilate the wall by a few pixels
kernel = np.ones((19, 19), dtype = np.uint8)
path = cv2.dilate(path, kernel)
#cv2.imshow('Dilate the wall by a few pixels',path)
#Erode by the same amount of pixels
path_erode = cv2.erode(path, kernel);
#cv2.imshow('Erode by the same amount of pixels',path_erode)
#absdiff
path = cv2.absdiff(path, path_erode);
#cv2.imshow('absdiff',path)
#solution
channels = cv2.split(img);
channels[0] &= ~path;
channels[1] &= ~path;
channels[2] |= path;
dst = cv2.merge(channels);
cv2.imshow("solution", dst);
#waiting for any key to close windows
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
image = sys.argv[-1]
SolvingMaze(image)
希望本文所述对大家Python程序设计有所帮助。
来源:http://blog.csdn.net/chendejiao/article/details/43231659
标签:Python,算法,游戏
0
投稿
猜你喜欢
Python设计模式之MVC模式简单示例
2023-02-24 16:58:33
Python实现多态、协议和鸭子类型的代码详解
2021-03-16 19:02:35
使用matplotlib画散点图的方法
2022-07-30 20:49:54
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2024-04-22 13:06:34
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2024-01-16 13:13:26
在微信小程序里使用watch和computed的方法
2024-04-10 16:16:40
php查询whois信息的方法
2023-09-05 10:47:00
vue 解决兄弟组件、跨组件深层次的通信操作
2024-05-09 15:12:55
Python3计算三角形的面积代码
2022-06-20 21:03:54
Python中的filter()函数的用法
2022-04-23 11:42:15
在Django下测试与调试REST API的方法详解
2023-05-19 16:09:32
也谈网页圆角的背景图法
2009-03-19 14:09:00
华为2019校招笔试题之处理字符串(python版)
2023-09-29 19:42:04
django配置app中的静态文件步骤
2021-03-15 21:43:57
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2021-02-04 03:22:19
php实现上传图片保存到数据库的方法
2024-05-09 14:48:35
MySQLMerge存储引擎
2024-01-14 07:39:25
MSSQL存储过程分页,ASP存储过程分页
2009-09-11 12:50:00
海量数据库的查询优化及分页算法方案
2024-01-16 18:50:51
python 常见的反爬虫策略
2022-12-17 21:51:54