今回は業務でopencvでチャートの画像から数値を読み取る処理を行う必要があったのですが、少しハマったのでアプローチをメモしておきます
今回読み取るのはこんな感じの画像です

サンプルコード
import cv2
import numpy as np
from google.colab.patches import cv2_imshow # パッチファイルインポート
# 画像を読み込む
image = cv2.imread('/content/msg (1).png')
# HSV色空間に変換
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 薄い緑色のマスク
lower_light_green = np.array([35, 40, 50])
upper_light_green = np.array([85, 100, 255])
mask_green = cv2.inRange(hsv, lower_light_green, upper_light_green)
# マスクを合成
mask_combined = cv2.bitwise_or(mask_blue, mask_green)
# マスクと元の画像を合成
result = cv2.bitwise_and(image, image, mask=mask_combined)
# 結果を表示
cv2_imshow(result)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 非ゼロのピクセル座標を取得
y_coords, x_coords = np.nonzero(mask_combined)
# y座標の最大値と最小値を取得
y_min = np.min(y_coords)
y_max = np.max(y_coords)
print("Yの最小値:", y_min)
print("Yの最大値:", y_max)
# 非ゼロのピクセル座標を取得
y_coords, x_coords = np.nonzero(mask_combined)
# Matplotlibで表示
plt.scatter(x_coords, y_coords, c='b', marker='.')
plt.gca().invert_yaxis() # y座標を画像のものに合わせるため反転
plt.show()

まとめ
こんな感じでPythonとopencvでチャートの画像から数値を読み取ることができました。では~


コメント