本文实例讲述了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实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
# Python解决走迷宫问题算法示例
# 用Python代码来解图片迷宫的方法整理
# Python基于递归算法实现的走迷宫问题
# Python深度优先算法生成迷宫
# Python使用Tkinter实现机器人走迷宫
# Python使用回溯法子集树模板解决迷宫问题示例
# 一道python走迷宫算法题
# Python 实现递归法解决迷宫问题的示例代码
# python实现地牢迷宫生成的完整步骤
# 进阶
# 操作技巧
# 相关内容
# 数据结构
# 给大家
# 更多关于
# 所述
# 程序设计
# 使用技巧
# 游戏开发
# 编程技巧
# 讲述了
# np
# Chen
# import
# image
# SolvingMaze
# def
# leeyoung
相关文章:
如何在Windows环境下新建FTP站点并设置权限?
如何通过可视化优化提升建站效果?
,网站推广常用方法?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
javascript中的try catch异常捕获机制用法分析
网站制作壁纸教程视频,电脑壁纸网站?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
建站之星安装后如何配置SEO及设计样式?
宝塔新建站点报错如何解决?
建站与域名管理如何高效结合?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
高端建站如何打造兼具美学与转化的品牌官网?
Python文件管理规范_工程实践说明【指导】
如何在七牛云存储上搭建网站并设置自定义域名?
建站之星与建站宝盒如何选择最佳方案?
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何快速上传建站程序避免常见错误?
如何通过PHP快速构建高效问答网站功能?
建站之星如何助力企业快速打造五合一网站?
小型网站建站如何选择虚拟主机?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何选择最佳自助建站系统?快速指南解析优劣
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何通过老薛主机一键快速建站?
建站之星官网登录失败?如何快速解决?
如何通过FTP服务器快速搭建网站?
建站之星安装失败:服务器环境不兼容?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
定制建站流程解析:需求评估与SEO优化功能开发指南
建站主机选购指南:核心配置与性价比推荐解析
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
专业商城网站制作公司有哪些,pi商城官网是哪个?
Android滚轮选择时间控件使用详解
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
建站主机功能解析:服务器选择与快速搭建指南
javascript中对象的定义、使用以及对象和原型链操作小结
C#怎么创建控制台应用 C# Console App项目创建方法
如何正确下载安装西数主机建站助手?
建站主机核心功能解析:服务器选择与网站搭建流程指南
c++怎么用jemalloc c++替换默认内存分配器【性能】
教学网站制作软件,学习*后期制作的网站有哪些?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
已有域名和空间,如何快速搭建网站?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
网站制作员失业,怎样查看自己网站的注册者?
建站之星安装提示数据库无法连接如何解决?
如何通过网站建站时间优化SEO与用户体验?
*请认真填写需求信息,我们会在24小时内与您取得联系。