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获取任意xml节点值的方法
May 05 Python
Python使用迭代器捕获Generator返回值的方法
Apr 05 Python
Python中的id()函数指的什么
Oct 17 Python
python skimage 连通性区域检测方法
Jun 21 Python
关于python2 csv写入空白行的问题
Jun 22 Python
python读取和保存图片5种方法对比
Sep 12 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
简单了解python的内存管理机制
Jul 08 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
Python selenium环境搭建实现过程解析
Sep 08 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实现aes加密类分享
2014/02/16 PHP
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
javascript中的括号()用法小结
2014/04/14 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
python基础教程之基本内置数据类型介绍
2014/02/20 Python
详解Django中Request对象的相关用法
2015/07/17 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
Python Socket编程详细介绍
2017/03/23 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
Django实现文件上传下载功能
2019/10/06 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
Pandas的数据过滤实现
2021/01/15 Python
九年级科学教学反思
2014/01/29 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
ORACLE查看当前账号的相关信息
2021/06/18 Oracle