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中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
python+VTK环境搭建及第一个简单程序代码
Dec 13 Python
Python 创建空的list,以及append用法讲解
May 04 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
详解用Python实现自动化监控远程服务器
May 18 Python
python numpy实现文件存取的示例代码
May 26 Python
python多进程下实现日志记录按时间分割
Jul 22 Python
python单例模式原理与创建方法实例分析
Oct 26 Python
numpy.transpose()实现数组的转置例子
Dec 02 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 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
在数据量大(超过10万)的情况下
2007/01/15 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
jquery 指南/入门基础
2007/11/30 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
VUE+node(express)实现前后端分离
2019/10/13 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
关于Django Models CharField 参数说明
2020/03/31 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
师范学院毕业生求职信范文
2013/12/26 职场文书
联谊活动策划书
2014/01/26 职场文书
学生请假条
2014/04/11 职场文书
《她是我的朋友》教学反思
2014/04/26 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
公司人事管理制度
2015/08/05 职场文书
企业愿景口号
2015/12/25 职场文书
Python字典的基础操作
2021/11/01 Python