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 23 Python
Python中的hypot()方法使用简介
May 18 Python
django 开发忘记密码通过邮箱找回功能示例
Apr 17 Python
matplotlib 输出保存指定尺寸的图片方法
May 24 Python
python计算两个矩形框重合百分比的实例
Nov 07 Python
Pandas Shift函数的基础入门学习笔记
Nov 16 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
python实现最大优先队列
Aug 29 Python
python实现生成Word、docx文件的方法分析
Aug 30 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
Python如何使用循环结构和分支结构
Apr 13 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
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
js里的prototype使用示例
2010/11/19 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
2013/11/25 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
Python输出指定字符串的方法
2020/02/06 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
python 如何设置守护进程
2020/10/29 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
园艺师求职信
2014/04/27 职场文书
七一建党日演讲稿
2014/09/05 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
2014年服务员个人工作总结
2014/12/23 职场文书
2015年调度员工作总结
2015/04/30 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android