• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:opencv、プログラム初心者です。)

OpenCVでk-meansクラスタリングを実行する方法

このQ&Aのポイント
  • OpenCVを使用してk-meansクラスタリングを実行し、画像を分割および減色する方法について説明します。
  • サンプルコードを使用してk-meansクラスタリングを実装し、指定した画像をセグメント化します。
  • OpenCVのk-meansクラスタリングアルゴリズムを使用して画像の各ピクセルをRGBカラースペースでセグメント化し、各クラスタの中心を代表する色で画像を生成します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

サンプルプログラムでは、なにかの都合で、そのままでは使えないものがあります。 C/C++では、変数名や関数名等に半角英数以外の文字は使えない →¢記号は使えない文字ですから、プログラム自体が間違い 適切なものに変更する必要があります。 C/C++では、宣言していない変数や関数は使えない →~ersというものがどこかで宣言されているはずです。 同じファイル中のこともあれば、#includeで取り込んだファイル中のこともあります。 C/C++では、関数の引数に型が決まっている。型が違うとエラーになる。 →kmeans関数の引数を調べれば、~ersなるもの型がわかります。 そこで、リファレンスマニュアルを読むと http://opencv.jp/opencv-2.1/cpp/clustering_and_search_in_multi-dimensional_spaces.html#kmeans > double kmeans(const Mat& samples, int clusterCount, Mat& labels, TermCriteria termcrit, int attempts, int flags, Mat* centers) 該当する引数は、Mat型へのポインタだということがわかります。 Mat型のポインタ、ということは Mat* ~ers と宣言されたものか Mat ~ers と宣言したものを &演算子を付けて「 &~ers 」としたもののどちらか、になります。 この条件で探すと >Mat centers; という行があります。この後、centersが登場するのは >MatIterator_<Vec3f> itf = centers.begin<Vec3f>(); という行です。 宣言しただけで、特になんの操作もしていない centers をいきなり使うのはおかしいです。 この間になんらかの操作があると考えてよいでしょう。kmeansである可能性は十分に考えられます。 変数名も ~ers であり矛盾しません。 Mat型なので、 &centers としてkmeansの引数になっても矛盾しません。 HTMLの知識になりますが、 HTMLの実体参照に &cent; というのがあり、これがセント記号になります。;までが実体参照の書式なのですが、ときどき ;の無いものがあります。本来は、エラーなのですが、場合によっては ;を補って解釈してくれることもあります。 そう考えると、 &centers → &cent;ers → ¢ers となり、現在の状況と一致します。 以上から &centers としなければならないところが、文字化けして¢ersになった、と考えるのが妥当と思われます

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • hanmemomo
  • ベストアンサー率35% (205/580)
回答No.2

ken_tyan のが正解だな ソース中にコメントや文字列以外での 2バイト文字(またはそれ以上)は コンパイラーは常にエラーとみなしますので、 ¢ は間違いなく、書き間違いです。 &(変数の実体アドレス取り出し)などだと思われますね。 ということで、解決でしょう

すると、全ての回答が全文表示されます。
noname#119957
noname#119957
回答No.1

コンパイルエラーですか? ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 ソースコードに使用できない文字コードがあるからです。 ¢これは、もしかした、&ではありませんか?&ers cv.hの中や使用している、ライブラリ中にersという変数定義はありませんか? それにたいする参照かと思われますが。。

すると、全ての回答が全文表示されます。

関連するQ&A