
まくまく
Pythonの画像処理ライブラリ OpenCVで検出した図形のコーナーの座標をcsvファイルとして書き出してみようと思います。
元画像
使用する画像はこちら。白背景の中央に星形の図形が描写された画像です。
以下のプログラムを実行して、この図形のコーナーを検出したいと思います。
出力
プログラムを実行すると、図形のコーナーを検出することができました。赤い点が検出点です。
コーナー検出は、Shi-Tomasiの検出法で行いました。
検出した点をcsvで書き出すこともできます。
書き出したcsvファイルをエクセルで開いて、グラフを作成してみました。値も問題なさそうです。
OpenCVとエクセルで座標が反転しているので注意してください。OpenCVは左上が原点、エクセルのグラフは左下が原点です。
サンプルプログラム
#ライブラリのインポート
import numpy as np
import pandas as pd
import cv2
#画像読み込み
img = cv2.imread("test.jpeg")
#グレースケールに変換
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#空のリスト作成
xvalue = []
yvalue = []
#コーナー検出
corners = cv2.goodFeaturesToTrack(gray,25,0.01,10)
corners = np.int0(corners)
for i in corners:
x,y = i.ravel()
cv2.circle(img, (x,y), 3, (0,0,255), -1)
print(x,y)
xvalue.append(x)
yvalue.append(y)
#リストからデータフレーム作成
df = pd.DataFrame(list(zip(xvalue,yvalue)), columns= ["X座標","Y座標"])
df.to_csv("202201 corner.csv", encoding="shift_jis", index=False)
#画像書き出し
cv2.imwrite("test.jpg", img)
Python OpenCVを用いた画像処理についてはこちらの記事でまとめています。>>>Python OpenCV 使い方まとめ