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中的socket模块使用代理实例
May 29 Python
pip 错误unused-command-line-argument-hard-error-in-future解决办法
Jun 01 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
Python实现的字典值比较功能示例
Jan 08 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
Feb 22 Python
python plotly绘制直方图实例详解
Jul 22 Python
Python实现语音识别和语音合成功能
Sep 20 Python
Numpy一维线性插值函数的用法
Apr 22 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 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
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
vue中如何使用ztree
2018/02/06 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
python 正则表达式 概述及常用字符
2009/05/04 Python
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
python对文件的操作方法汇总
2020/02/28 Python
如何在python中判断变量的类型
2020/07/29 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
毕业生自荐书模版
2014/01/04 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
优秀学生事迹材料
2014/02/08 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
Node.js实现断点续传
2021/06/23 Javascript
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis