C++OpenCVでのMat型のポインタ操作

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
negimo

C++OpenCVでのMat型のポインタ操作

#1

投稿記事 by negimo » 8年前

C++版OpenCVで画像処理を行っています。現在Mat型配列の操作で困っています
<やりたいこと>
connectedComponentsWithStats()関数で画像をラベリングした後、関数出力である
重心情報centroidsのi番目の先頭ポインタとj番目の先頭ポインタを入れ替えたい

コード:

double *param = centroids.ptr<double>(j); //j番目のラベルの重心の先頭ポインタ
centroids.ptr<double>(j)=centroids.ptr<double>(i);
centroids.ptr<double>(i)=param;
これを実行すると
error: lvalue required as left operand of assignment
centroids.ptr(j)=centroids.ptr(i);
というエラーが出てきます。エラーの意味はわかるのですが、
どのような方法をとればポインタの位置を入れ替えるということを実現できるのかということがわかりません
解決にご助力頂けないでしょうか?

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: C++OpenCVでのMat型のポインタ操作

#2

投稿記事 by usao » 8年前

>ポインタを入れ替えたい

コード:

cv::Mat M = ( cv::Mat_<double>( 2,2 ) << 0,1,2,3 );

double *pRow1 = M.ptr<double>( 0 );
double *pRow2 = M.ptr<double>( 1 );

std::cout << pRow1[0] << ", " << pRow1[1] << std::endl;
std::cout << pRow2[0] << ", " << pRow2[1] << std::endl;
std::cout << std::endl;

std::swap( pRow1, pRow2 );

std::cout << pRow1[0] << ", " << pRow1[1] << std::endl;
std::cout << pRow2[0] << ", " << pRow2[1] << std::endl;
本当にこういうことがやりたいのだろうか
オフトピック
いつのまにかラベリングが提供されるようになったのか

negimo

Re: C++OpenCVでのMat型のポインタ操作

#3

投稿記事 by negimo » 8年前

ありがとうございます。
記載されていたプログラムをアレンジしたところやりたいことを実現させることができました。

閉鎖

“C言語何でも質問掲示板” へ戻る