加工にはOpenCV
をインストールして使用することをお勧めします。これは、動作するPythonライブラリも提供します。
ヒートマップについては、以下のように動作します。大量のヒートマップに合わせて修正する必要があります。
まず、画像を3つに、それぞれA
,B
およびC
の1つにトリミングします。次に、各カテゴリの色のピクセルを抽出し、最初に白に変換し、次にそれぞれを16 x 16
グレースケール画像にサイズ変更します。次に、ゼロ以外の値を現在のカテゴリ値に変換し、これを配列に追加します。
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