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

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

新規登録して質問してみよう
ただいま回答率
85.46%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Q&A

解決済

1回答

2028閲覧

OpenCVのキーポイント座標情報がfloatなのですがピクセル単位ではないのでしょうか

koomint

総合スコア3

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

0グッド

0クリップ

投稿2022/01/03 02:53

##OpenCVで特徴点抽出をして,その座標を収得するプログラムを作りましたが,得られた座標がfloat型でした.ピクセル単位ではないのでしょうか.
OpenCVのHPでもキーポイント座標情報がfloat型だと書かれていました.
OpenCV特徴検出の共通インタフェース
もしピクセル単位だとしたら整数ではないのでしょうか.
逆にピクセル単位じゃないのだとしたらどのようにしてピクセル単位に変換するのでしょうか.
ご教授ください.

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

もしピクセル単位だとしたら整数ではないのでしょうか

単位がピクセルでも計算する上では整数である必要はありません。そのページに記載の通り、float 型です。

逆にピクセル単位じゃないのだとしたらどのようにしてピクセル単位に変換するのでしょうか

int 型にキャストすればよいです。

cpp

1cv::Point2f p(1.1, 1.2); 2cv::Point p2 = cv::Point(p);

投稿2022/01/03 03:02

編集2022/01/03 03:08
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koomint

2022/01/03 03:06

ご回答ありがとうございます. 自分は画像から抽出された特徴点の座標のRGB値を確認したいのですが,簡単に座標をint型に変換して良いのでしょうか.
tiitoi

2022/01/03 03:07

> 簡単に座標をint型に変換して良いのでしょうか それで問題ないです。
koomint

2022/01/03 03:20

ありがとうございました.助かりました.
fana

2022/01/04 05:23

> cv::Point p2 = cv::Point(p); これは,どういう結果になるのか? という点に関する仕様情報みたいなのをご存知であれば教えていただきたいです. ググって出てきた https://docs.opencv.org/3.4/db/d4e/classcv_1_1Point__.html には, > The conversion from floating-point coordinates to integer coordinates is done by rounding. とかかれており,"rounding" の具体的なところがちょっと曖昧なような…? (英語で "rounding" とだけ書かれた場合,何らかの特定の丸め方法を指すのでしょうか?)
tiitoi

2022/01/04 05:38 編集

To: fanaさん https://github.com/opencv/opencv/blob/d24befa0bc7ef5e73bf8b1402fa1facbdbf9febb/modules/core/include/opencv2/core/types.hpp#L1212 template<typename _Tp> template<typename _Tp2> inline Point_<_Tp>::operator Point_<_Tp2>() const { return Point_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y)); } Point 型のキャスト演算子が定義されており、x、y がそれぞれ cv::saturate_cast<TYPE>() を使ってキャストされます。float -> int の場合、cvRound() で最も近い整数に丸められます。 https://github.com/opencv/opencv/blob/17234f82d025e3bbfbf611089637e5aa2038e7b8/modules/core/include/opencv2/core/saturate.hpp#L140
fana

2022/01/04 05:43

ありがとうございます. なるほど,「実装」は四捨五入な感じになっているのですね. --- > 画像から抽出された特徴点の座標のRGB値を確認したいのですが,簡単に座標をint型に変換して良いのでしょうか 良いかどうかは「あなた(がやってること)次第」な気がしますね. 「整数でない場所の値」は補間して求めたほうが良い場面もあり得るかもしれませんし.
koomint

2022/01/07 01:20

> 良いかどうかは「あなた(がやってること)次第」な気がしますね. 「整数でない場所の値」は補間して求めたほうが良い場面もあり得るかもしれませんし. 確かにその通りですね.よく考えてみます.的確なご意見をありがとうございました.
fana

2022/01/07 02:27 編集

極端な例で言えば,「コーナー」や「エッジ」みたいな箇所に出てくるような特徴点を検出しているような場合だと, 整数に丸めた座標から色を取得するような処理だと, 整数に丸めた座標がその境界のどっち側になるのか次第で色が異なるなんてこともあり得そう. (まぁこんな場合にはそもそも「特徴点の座標の色」とかいう謎概念を考えること自体しないだろうから,良い例ではないが)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問