티스토리 뷰
1. 보드판 생성
8 * 8 보드판을 만들기 위해 배열을 생성한다.
board = []
for i in range(8):
boardTemp = []
for j in range(8):
boardTemp.append(0)
board.append(boardTemp)
2. 기본 돌 세팅
othello 게임을 보면 기본 세팅이 되어있는 상태로 나온다.
halfWidth = int(len(board) / 2) - 1
halfHeight = int(len(board[0]) / 2) - 1
board[halfWidth][halfHeight] = 1
board[halfWidth][halfHeight+1] = 2
board[halfWidth+1][halfHeight] = 2
board[halfWidth+1][halfHeight+1] = 1
3. 방해물 인식
방해물을 어떻게 인식할 것인가 고민하다 특정위치에 픽셀값으로 판단하기로 생각했다.
이미지를 받아와 이미지의 크기를 저장한다.
image = cv2.imread('./images/cropped/cropImg_1.jpg', cv2.IMREAD_COLOR)
height, width, channel = image.shape
cv2.imshow('image', image)
cv2.waitKey(0)
8*8 보드판에서 한칸의 간격을 계산하기 위해 높이, 너비를 8로 나누어줬다.
cellWidth = int(width / 8)
cellHeight = int(height / 8)
opencv python에서 이미지의 개별 픽셀을 접근하여 값을 읽어오는 방법으로 item
을 사용할 수 있다.
opencv에서는 이미지를 numpy 배열로 저장하기 때문에 y축, x축 순으로 접근한다.img.item(y, x, color)
로 해당 픽셀의 값을 가져올 수 있다.
color = 0: blue
color = 1: green
color = 2: red
해당 픽셀에서의 색깔조합이 다르면 (방해물이라면) 해당 보드판을 -1로 바꾸어준다.
xIndex = 0
yIndex = 0
for y in range(int(cellHeight / 2), height, cellHeight):
for x in range(int(cellWidth / 2), width, cellWidth):
b = image.item(y, x, 0)
g = image.item(y, x, 1)
r = image.item(y, x, 2)
gray = (int(b) + int(g) + int(r)) / 3.0
if(gray <= 60):
board[xIndex][yIndex] = -1
yIndex += 1
xIndex += 1
yIndex = 0
결과화면
image | board |
참고자료
https://webnautes.tistory.com/796
'📦 개발 > opencv' 카테고리의 다른 글
[opencv] 이미지 처리 궁금한 것 정리 (0) | 2023.01.28 |
---|---|
[opencv] opencv.js Getting Started with Images (0) | 2023.01.15 |
[opencv] opencv.js template matching (0) | 2023.01.14 |