처리를 돕기 위해 OpenCV
을 설치하여 사용하는 것이 좋습니다. 이것은 또한 사용할 파이썬 라이브러리를 제공합니다.
다음 히트 맵에 대해 다음과 같이 작동합니다. 방대한 heatmap에 맞게 수정해야합니다.
먼저 이미지를 3으로 자릅니다. 하나는 A
, B
및 C
입니다. 다음으로 각 범주 색의 픽셀을 추출하고 먼저 흰색으로 변환 한 다음 각각을 16 x 16
그레이 스케일 이미지로 크기를 조정합니다. 다음으로 0이 아닌 값을 현재 범주 값으로 변환하고이를 배열에 추가합니다.
import numpy as np
import cv2
def parse_image(img):
# Start with all zeros in a 16x16 array
data = np.zeros((16, 16), dtype=int)
# List holding min and max BGR values for each category
categories = [
(5, (0, 0, 250), (5, 5, 255)), # Red
(4, (5, 60, 152), (12, 78, 160)), # Dark brown
(3, (9, 105, 225), (18, 120, 240)), # Light brown
(2, (220, 235, 250), (230, 245, 255)), # Light orange
(1, (250, 250, 250), (255, 255, 255)), # White
]
for category, bgr_min, bgr_max in categories:
# Extract pixels in the required range and convert them to 255
mask = cv2.inRange(img, bgr_min, bgr_max)
image_cat = cv2.bitwise_or(img, np.full(img.shape, 255, dtype=np.uint8), mask=mask)
# Convert the image into greyscale
image_grey = cv2.cvtColor(image_cat, cv2.COLOR_BGR2GRAY)
# Resize the image to 16x16
values = cv2.resize(image_grey, (16, 16))
# Convert non black values into the current category value
values[values > 0] = category
# Add the values to the data array
data = data + values
return data
# Load the heatmap
image_src = cv2.imread("heatmap.jpg")
cv2.imshow("Source", image_src)
# Crop into 3 sub images
starty = 28
cropx = 234
cropy = 184
images = []
for number, startx in enumerate([30, 303, 572], start=1):
images.append(image_src[starty:starty+cropy,startx:startx+cropx])
# Parse A, B and C
abc = [parse_image(img) for img in images]
print abc
그래서 히트 맵에 대한 당신이 (하나의 배열로 재편 될 수있다) 다음과 같은 출력 얻을 것입니다 제공 : JPG 이미지 작업,
[array([[2, 2, 5, 3, 5, 3, 5, 4, 2, 5, 2, 2, 5, 2, 2, 2],
[2, 2, 2, 3, 2, 2, 4, 3, 2, 4, 2, 2, 5, 2, 2, 2],
[2, 2, 2, 2, 2, 2, 3, 2, 3, 3, 2, 2, 5, 2, 2, 2],
[4, 3, 2, 5, 4, 2, 5, 5, 5, 5, 2, 2, 5, 2, 2, 2],
[2, 3, 2, 4, 2, 2, 5, 3, 3, 5, 2, 2, 5, 2, 2, 2],
[3, 4, 3, 5, 4, 2, 5, 5, 5, 5, 2, 2, 5, 2, 2, 2],
[4, 4, 5, 5, 4, 2, 5, 5, 5, 5, 2, 2, 5, 2, 2, 2],
[5, 5, 5, 5, 5, 3, 2, 2, 5, 2, 2, 2, 5, 3, 5, 5],
[3, 4, 5, 4, 5, 2, 5, 5, 5, 5, 2, 2, 5, 2, 3, 5],
[3, 3, 5, 5, 4, 2, 5, 5, 3, 5, 2, 2, 5, 2, 2, 3],
[4, 4, 5, 5, 5, 5, 2, 2, 5, 2, 2, 2, 5, 2, 2, 5],
[3, 2, 2, 2, 3, 2, 4, 5, 5, 3, 2, 2, 5, 2, 2, 5],
[1, 1, 2, 2, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 2],
[2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2],
[4, 3, 2, 5, 5, 2, 5, 5, 2, 5, 2, 2, 5, 2, 2, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2]]), array([[2, 3, 3, 3, 2, 2, 2, 2, 0, 3, 2, 3, 2, 2, 2, 3],
[2, 3, 2, 3, 2, 3, 3, 2, 0, 3, 2, 2, 2, 2, 2, 3],
[2, 2, 2, 3, 2, 2, 3, 2, 3, 2, 2, 3, 2, 2, 2, 2],
[2, 2, 2, 3, 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2],
[2, 3, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 0, 3],
[2, 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 3, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[3, 3, 4, 3, 2, 2, 3, 2, 2, 2, 3, 2, 2, 2, 2, 3],
[3, 3, 4, 3, 0, 3, 3, 2, 2, 2, 2, 3, 2, 2, 2, 3],
[2, 0, 3, 3, 0, 2, 3, 2, 0, 2, 3, 3, 2, 2, 2, 2],
[2, 3, 2, 3, 3, 2, 3, 2, 0, 2, 3, 3, 2, 2, 2, 2],
[1, 1, 2, 1, 0, 2, 1, 1, 3, 1, 2, 2, 1, 2, 2, 0],
[2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[3, 2, 2, 3, 2, 2, 3, 2, 3, 3, 2, 2, 2, 2, 2, 3],
[2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2]]), array([[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 3, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 0, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2],
[2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5],
[2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2],
[1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 3, 2, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2]])]
참고 이미지의 유물이있을 것을 의미합니다 따라서 색상은 정확한 값을 갖지 않습니다. 이것이 최소값과 최대 값이있는 이유입니다. 또한 일반적으로 RGB
값이 표시됩니다. 하지만 여기서는 BGR
값으로 작업하게됩니다. 0
값을 가지지 않도록 최소 최대 값을 조정해야합니다.
스택 오버플로는 코드 작성 서비스가 아니므로 이미 가지고있는 코드를 게시하여 도움을 받으십시오. – jadsq