hiyoko-programingの日記

プログラミングを勉強したてのひよっ子。   エンジニア目指して勉強中。

画像の角を表示する

◉角(コーナー)を使う

濃度の違いから「角のような」位置を見つけ「特徴点」とする方法。

ここでいう、角とは、大まかにいうと、

「縦と横が交わる所で、周りよりも明るい部分、または濃い部分がある所」。

コンピュータがこの角を見つけることで、

比較する情報が定まり、効率的に「一致」か「近い」かを判断することができる。

 

◉画像から角(コーナー)を見つける方法

cv2.goodFeaturesToTorack(画像, 角の最大数, 品質レベル, 2つのコーナー間の距離)

 ⚫︎画像:コーナーを表示したい画像

 ⚫︎角の最大数:見つけたいコーナーの最大数

 ⚫︎品質レベル:採用するコーナーのしつの最低基準(0〜1で指定)

 ⚫︎2つのコーナー間の距離:コーナー間の直線距離

 

<画像から角(コーナー)を抽出するPythonコード例>

import sys

import cv2

if len(sys.argv)<2:

    print('表示したいファイル名を指定してください。')

    sys.exit()

file = sys.argv[1]

try:

    img = cv2.imread( ' file ' ) 

    if img is None:

         raise ValueError('ファイルが見つかりません')

    img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

    MAX_CORNERS = 80

    QUALITY_LEVEL = 0.01

    MIN_DISTANCE = 5.0

    corners = cv2.googFeaturesToTrack(img_gray, MAX_CORNERS, QUALITY_LEVEL, MIN_DISTANCE)

    for corner_info in corners:

          corner_x, corner_y = corner_info.ravel()

          cv2.circle(img, (corner_x, corner_y), 1, (0, 200, 255), -1)

          cv2.circle(img, (coner_x, corner_y), 8, (0, 200, 255))

    cv2.imshow(file, img)

    cv2.waitKey(0)

    cv2.destroyAllWindows()

except ValueError as e:

    print(e)

except:

    import traceback

    traceback.print_exc()

 

 

◉まとめ

輪郭にも得意分野があることを覚えておくとよい。

 ラプラシアン  エッジから大まかな形を

 ソーベル    縦横のエッジを

 キャニー    エッジが見つけにくい場合に

 コーナー    特徴点の数や集まり具合から内容を推測する場合に