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复制文件代码实现
Dec 23 Python
python两种遍历字典(dict)的方法比较
May 29 Python
Python实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 Python
深入浅析Python的类
Jun 22 Python
python函数修饰符@的使用方法解析
Sep 02 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
详解python tkinter模块安装过程
Jan 06 Python
Pytorch自己加载单通道图片用作数据集训练的实例
Jan 18 Python
pytorch快速搭建神经网络_Sequential操作
Jun 17 Python
使用python实现名片管理系统
Jun 18 Python
python实现简单的井字棋
May 26 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删除数组中特定元素的两种方法
2019/02/28 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
jquery创建div 实现代码
2009/04/27 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
javascript实现表单提交后,提交按钮不可用的方法
2015/04/18 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
Python中单、双下划线的区别总结
2017/12/01 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
python excel转换csv代码实例
2019/08/26 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
感恩教育月活动总结
2014/07/07 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
详解MySQL的内连接和外连接
2023/05/08 MySQL