質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.37%

OpenCV Keypointの内容をCSVファイルに書き出す関数を作りたいがうまくいかない。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 805

score 43

前提・実現したいこと

Python+OpenCVにて、Keypointの内容をCSVファイルに書き出す関数を作りたい。

発生している問題・エラーメッセージ

うまくいかない。型の名前?がわからんせいだと思うのですけども…

 File "<path>", line 5
    def wirte_kp_list(keypoint hoge, str name = 'kp'):
                                  ^
SyntaxError: invalid syntax

該当のソースコード

# -*- coding: utf-8 -*-
import cv2

def wirte_kp_list(keypoint hoge, str name = 'kp'):
    f = open(name+'.csv', 'w')
    fileprint = "x[pic],y[pic],size,ang[deg],response,octave,class_id\n"
    for x in hoge:    
        fileprint += (
            str(x.pt[0]) + "," + 
            str(x.pt[1]) + "," +
            str(x.size) + "," +
            str(x.angle) + "," +
            str(x.response) + "," +
            str(x.octave) + "," +
            str(x.class_id) + "\n"
        )    
        #特徴点の位置をx、y分けて表示
    f.write(fileprint)
    f.close()

# 画像1
img1 = cv2.imread("img1.jpg")
# 画像2
img2 = cv2.imread("img2.jpg")

# A-KAZE検出器の生成
akaze = cv2.AKAZE_create()

# 特徴量の検出と特徴量ベクトルの計算
kp1, des1 = akaze.detectAndCompute(img1, None)
kp2, des2 = akaze.detectAndCompute(img2, None)

wirte_kp_list(kp1,'kp1')
wirte_kp_list(kp2,'kp2')

試したこと

公式ドキュメントとか見ながらいろいろ名前変えて試してみたけどダメ。

補足情報(FW/ツールのバージョンなど)

バージョン: 1.38.1 (user setup)
コミット: b37e54c98e1a74ba89e03073e5a3761284e3ffb0
日付: 2019-09-11T13:35:15.005Z
Electron: 4.2.10
Chrome: 69.0.3497.128
Node.js: 10.11.0
V8: 6.9.427.31-electron.0
OS: Windows_NT x64 10.0.17763

Package            Version
------------------ --------
astroid            2.2.5
attrs              19.1.0
backcall           0.1.0
bleach             3.1.0
colorama           0.4.1
cycler             0.10.0
decorator          4.4.0
defusedxml         0.6.0
entrypoints        0.3
ipykernel          5.1.2
ipython            7.8.0
ipython-genutils   0.2.0
ipywidgets         7.5.1
isort              4.3.21
jedi               0.15.1
Jinja2             2.10.1
jsonschema         3.0.2
jupyter            1.0.0
jupyter-client     5.3.3
jupyter-console    6.0.0
jupyter-core       4.5.0
kiwisolver         1.1.0
lazy-object-proxy  1.4.1
MarkupSafe         1.1.1
matplotlib         3.1.1
mccabe             0.6.1
mistune            0.8.4
nbconvert          5.6.0
nbformat           4.4.0
networkx           2.3
notebook           6.0.1
numpy              1.17.0
opencv-python      4.1.1.26
pandas             0.25.0
pandocfilters      1.4.2
parso              0.5.1
pickleshare        0.7.5
pip                19.2.3
prometheus-client  0.7.1
prompt-toolkit     2.0.9
Pygments           2.4.2
pylint             2.3.1
pyparsing          2.4.2
pyrsistent         0.15.4
python-dateutil    2.8.0
pytz               2019.2
pywin32            225
pywinpty           0.5.5
PyYAML             5.1.2
pyzmq              18.1.0
qtconsole          4.5.5
Send2Trash         1.5.0
setuptools         41.2.0
six                1.12.0
terminado          0.8.2
testpath           0.4.2
tornado            6.0.3
traitlets          4.3.2
typed-ast          1.4.0
wcwidth            0.1.7
webencodings       0.5.1
widgetsnbextension 3.5.1
wrapt              1.11.2
XlsxWriter         1.1.9

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

def wirte_kp_list(keypoint hoge, str name = 'kp'):

Pythonは関数定義の際、型を書きません。今回の場合、keypointstrを書くのが余計です。
C言語などとは違いどのような型の変数でも受け付けます。

型を限定したいなら型チェック処理を実装する必要があります。
が、ここでは詳しく書きません。isinstanceraise ValueErrorなどをキーワードに調べてみてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/22 14:01

    Cの癖が抜けないです。消したら動きました。ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る