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下载指定页面上图片的方法
May 12 Python
Python检测生僻字的实现方法
Oct 23 Python
Python基于TCP实现会聊天的小机器人功能示例
Apr 09 Python
PyQt5每天必学之布局管理
Apr 19 Python
Pandas0.25来了千万别错过这10大好用的新功能
Aug 07 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
Jan 20 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
Feb 05 Python
Python实现桌面翻译工具【新手必学】
Feb 12 Python
python 基于opencv操作摄像头
Dec 24 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 strtotime函数详解
2009/12/18 PHP
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
详解操作虚拟dom模拟react视图渲染
2018/07/25 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
vue 根据选择的月份动态展示日期对应的星期几
2021/02/06 Vue.js
Python 的 with 语句详解
2014/06/13 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
安装Python的教程-Windows
2017/07/22 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
python Shapely使用指南详解
2020/02/18 Python
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
地理教师岗位职责
2014/03/16 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
余世维讲座观后感
2015/06/11 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python