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的Flask框架结合MySQL写一个内存监控程序
Nov 07 Python
Python实现图片转字符画的示例
Aug 22 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
Python实现的求解最大公约数算法示例
May 03 Python
python实现txt文件格式转换为arff格式
May 31 Python
python 求某条线上特定x值或y值的点坐标方法
Jul 09 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
Python高阶函数、常用内置函数用法实例分析
Dec 26 Python
python将音频进行变速的操作方法
Apr 08 Python
python编写实现抽奖器
Sep 10 Python
Pygame Rect区域位置的使用(图文)
Nov 17 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 彩色文字实现代码
2009/06/29 PHP
php面向对象全攻略 (七) 继承性
2009/09/30 PHP
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
JavaScript浏览器对象之一Window对象详解
2016/06/03 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
JSON 数据格式详解
2017/09/13 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python语言的面相对象编程方式初步学习
2016/03/12 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
应届生.NET方向面试题
2015/05/23 面试题
IBatis持久层技术
2016/07/18 面试题
简单而又朴实的个人求职信分享
2013/12/12 职场文书
综合办公室个人的自我评价
2013/12/22 职场文书
高中校园广播稿
2014/10/21 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
大学生党课感想
2015/08/11 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python
mysql查找连续出现n次以上的数字
2022/05/11 MySQL