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 selenium 三种等待方式详解(必会)
Sep 15 Python
python中json格式数据输出的简单实现方法
Oct 31 Python
python3+PyQt5自定义视图详解
Apr 24 Python
pytorch打印网络结构的实例
Aug 19 Python
Python搭建代理IP池实现存储IP的方法
Oct 27 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
Dec 05 Python
Pytorch之Variable的用法
Dec 31 Python
Python enumerate内置库用法解析
Feb 24 Python
Python selenium自动化测试模型图解
Apr 15 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
如何用Python徒手写线性回归
Jan 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实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
python判断字符串是否是json格式方法分享
2017/11/07 Python
Python2.7 实现引入自己写的类方法
2018/04/29 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
一套SQL笔试题
2016/08/14 面试题
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
高中学生干部学习的自我评价
2014/02/21 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
护理见习报告范文
2014/11/03 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
中国世界遗产导游词
2015/02/13 职场文书
业务员管理制度范本
2015/08/06 职场文书
如何写好开幕词?
2019/06/24 职场文书
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python