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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.