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 常用string函数(收藏)
May 30 Python
Python探索之ModelForm代码详解
Oct 26 Python
python实现决策树分类算法
Dec 21 Python
Python读取MRI并显示为灰度图像实例代码
Jan 03 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
Jan 05 Python
使用Python函数进行模块化的实现
Nov 15 Python
python爬虫添加请求头代码实例
Dec 28 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 Python
Python基于pip实现离线打包过程详解
May 15 Python
python实现简单石头剪刀布游戏
Oct 24 Python
Python可视化神器pyecharts绘制地理图表
Jul 07 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语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
2016/10/28 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
Extjs学习笔记之七 布局
2010/01/08 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
javascript表单验证大全
2015/08/12 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
go语言计算两个时间的时间差方法
2015/03/13 Python
python 远程统计文件代码分享
2015/05/14 Python
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
使用PyTorch训练一个图像分类器实例
2020/01/08 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
python和php哪个容易学
2020/06/19 Python
python 进程池pool使用详解
2020/10/15 Python
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
5.12护士节演讲稿
2014/04/30 职场文书
任命书范本大全
2014/06/06 职场文书
故宫的导游词
2015/01/31 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
python中os.path.join()函数实例用法
2021/05/26 Python
python三子棋游戏
2022/05/04 Python
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS