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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3599閲覧

cv::Vec3bの使い方

BASEBALL-Y

総合スコア67

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/10/30 02:37

##質問内容
以下のサイト内にある

C++

1cv::Vec3b &pixel = dst.at<cv::Vec3b>(y, x);

で,なぜ,『&』が記述されているのでしょうか?

その次の文では,pixelの前に『&』が記述されていないです.

C++

1pixel = colors[label];

もし,分かる方がいましたら,回答して頂けると助かります.
よろしくお願いいたします.

###参考サイト

参考サイト

####コード

C++

1int main() 2{ 3Mat src = imread("G:\yama\sidba\text.bmp"); 4 5Mat gray, binimg, labimg; 6 7 8imshow("Input image", src); 9 10 11cvtColor(src, gray, COLOR_BGR2GRAY); //入力画像をグレースケール化 12 13 14threshold(gray, binimg, 127, 255, THRESH_BINARY); //2値化処理 15 16 17dilate(binimg, binimg, noArray(), Point(-1, -1), 2); //2値化した画像に2回Dilate処 1819 20 21imshow("Binary-Dilate Image", binimg); 22 23 24int nLabs = connectedComponents(binimg, labimg, 8, CV_32S); //ラベリング処理 25 26 27// ラベリング結果の描画色を決定 28vector<Vec3b> colors(nLabs); 29 30colors[0] = Vec3b(0, 0, 0); 31 32for (int label = 1; label < nLabs; ++label) { 33 34//ラベル番号に対して色をランダムに割り当てる 35colors[label] = Vec3b((rand() & 255), (rand() & 255), (rand() & 255)); 36} 37 38 39// ラベリング結果の描画 40Mat dst(src.size(), CV_8UC3); 41 42for (int y = 0; y < dst.rows; ++y) { 43for (int x = 0; x < dst.cols; ++x) { 44 45//ラベリング画像の(x,y)上のラベル番号を抽出 46int label = labimg.at<int>(y, x); 47 48 49//ラベル番号に割り当てられた色(画素値)を結果画像の(x,y)に格納する 50cv::Vec3b &pixel = dst.at<cv::Vec3b>(y, x); 51 52pixel = colors[label]; 53} 54} 55 56 57 58imshow("Labeling Image", dst); 59waitKey(); 60 61 62return 0; 63 64}

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

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

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

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

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

guest

回答1

0

ベストアンサー

(質問を分けずとも,前の質問と一纏めに扱っても良かったのではないかと思いますが…)


cv::Vec3b &pixel = dst.atcv::Vec3b(y, x);

この「&」付きでの定義は,「参照(reference)」というものです.
C++言語の機能なので,検索なりすれば説明がたくさん見つかるかと思います.

投稿2020/10/30 02:48

fana

総合スコア11996

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

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

fana

2020/10/30 02:50

int a; なら,aの型は「int」. 同様に, この場合のpixelの型は「cv::Vec3b &」なわけです.
BASEBALL-Y

2020/10/30 03:06

fanaさん. 回答ありがとうございます! 前回の質問とひとまとめにしてもよかったですね. 凄く,分かり易い解説をありがとうございます. 解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問