Python基于分水岭算法解决走迷宫游戏示例


Posted in Python onSeptember 26, 2017

本文实例讲述了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相关内容可查看本站专题:《Python游戏开发技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python字符串的常用操作方法小结
May 21 Python
深入理解Python3 内置函数大全
Nov 23 Python
python设定并获取socket超时时间的方法
Jan 12 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 Python
python base64库给用户名或密码加密的流程
Jan 02 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
浅析python标准库中的glob
Mar 13 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
Python使用grequests并发发送请求的示例
Nov 05 Python
selenium+python实现基本自动化测试的示例代码
Jan 27 Python
粗暴解决CUDA out of memory的问题
May 22 Python
Python计算斗牛游戏概率算法实例分析
Sep 26 #Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 #Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 #Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
Sep 26 #Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
Sep 26 #Python
python九九乘法表的实例
Sep 26 #Python
Python实现简单的HttpServer服务器示例
Sep 25 #Python
You might like
PHP分页显示制作详细讲解
2006/10/09 PHP
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
图象函数中的中文显示
2006/10/09 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
图片自动缩小 点击放大
2008/07/07 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
PHP PDO操作总结
2014/11/17 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
在Python中使用模块的教程
2015/04/27 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
mac安装scrapy并创建项目的实例讲解
2018/06/13 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
飞利浦美国官网:Philips美国
2020/02/28 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
网络工程师的自我评价
2013/10/02 职场文书
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
求职信写作要突出重点
2014/01/01 职场文书
超市后勤自我鉴定
2014/01/17 职场文书
教师自我鉴定范文
2014/03/20 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
大学生暑假实习总结
2015/07/13 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书