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性能优化技巧
Mar 09 Python
用Python制作简单的朴素基数估计器的教程
Apr 01 Python
Python中优化NumPy包使用性能的教程
Apr 23 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
简单介绍Python中的readline()方法的使用
May 24 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
May 16 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
Oct 20 Python
django模板加载静态文件的方法步骤
Mar 01 Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 Python
pandas计数 value_counts()的使用
Jun 24 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
基于Python实现的购物商城管理系统
Apr 27 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
使用NetBeans + Xdebug调试PHP程序的方法
2011/04/12 PHP
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
AngularJS实现标签页的两种方式
2016/09/05 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
js实现无缝轮播图
2020/03/09 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
Python查询IP地址归属完整代码
2017/06/21 Python
使用django自带的user做外键的方法
2020/11/30 Python
IE9下html5初试小刀
2010/09/21 HTML / CSS
专科毕业生自我鉴定
2013/12/01 职场文书
志愿者服务感言
2014/02/27 职场文书
实习班主任自我评价
2015/03/11 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL