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的Django框架加载模版的方式
Jul 20 Python
Selenium 模拟浏览器动态加载页面的实现方法
May 16 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
Django集成celery发送异步邮件实例
Dec 17 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
python实现飞机大战项目
Mar 11 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
教你如何用python开发一款数字推盘小游戏
Apr 14 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封装CURL扩展类实例
2015/07/28 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
javascript引用对象的方法
2007/01/11 Javascript
利用javascript实现一些常用软件的下载导航
2009/08/03 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
在react中使用vuex的示例代码
2018/07/30 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
全球度假村:Club Med
2017/11/27 全球购物
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
一套软件开发工程师笔试题
2015/05/18 面试题
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
护理专业毕业生自荐信范文
2014/01/05 职场文书
机电一体化应届生求职信范文
2014/01/24 职场文书
淘宝客服自我总结鉴定
2014/01/25 职场文书
给校长的建议书400字
2014/05/15 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
交通安全教育心得体会
2016/01/15 职场文书
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python