今回は業務で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でチャートの画像から数値を読み取ることができました。では~
コメント