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 13 Python
Python的ORM框架SQLObject入门实例
Apr 28 Python
Python实现SVN的目录周期性备份实例
Jul 17 Python
Python基于whois模块简单识别网站域名及所有者的方法
Apr 23 Python
推荐10款最受Python开发者欢迎的Python IDE
Sep 16 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
Python自定义一个异常类的方法
Jun 27 Python
python中open函数的基本用法示例
Sep 07 Python
python 实现二维列表转置
Dec 02 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
详解Python flask的前后端交互
Mar 31 Python
Python实现双向链表
May 25 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程序实现支持页面后退的两种方法
2008/06/30 PHP
PHP伪造referer实例代码
2008/09/20 PHP
php学习之数据类型之间的转换介绍
2011/06/09 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
js类型检查实现代码
2010/10/29 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
python之wxPython应用实例
2014/09/28 Python
基于Python代码编辑器的选用(详解)
2017/09/13 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
python样条插值的实现代码
2018/12/17 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
面试后的英文感谢信
2014/02/01 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
立春观后感
2015/06/18 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
新闻报道稿范文
2015/07/23 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
Python开发五子棋小游戏
2022/05/02 Python