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

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

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

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

C++

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

Q&A

解決済

2回答

760閲覧

OpenCV 3.4.1にて、引数 Mat& mask = Mat()を使用したいです。

mypace

総合スコア45

OpenCV

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

C++

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

0グッド

0クリップ

投稿2018/12/27 06:05

C++ OpenCV(ver 3.4.1)を使用し、ステレオ画像から視差、デプス画像を作成しております。
URL http://opencv.jp/opencv2-x-samples/point-cloud-rendering
のサンプルコードをコンパイルしたところ、
projectImagefromXYZ関数の引数 Mat& mask = Mat()にて、
E0461 非 const への参照の初期値は左辺値である必要があります
というエラーが発生します。
調べましたが、OpenCV 3.4.1でどの様に記述を行えばよいかわからなかったため
アドバイス等いただきたく思います。

C++

1void projectImagefromXYZ(Mat& image, Mat& destimage, Mat& disp, Mat& destdisp, Mat& xyz, Mat& R, Mat& t, Mat& K, Mat& dist, bool isSub = true, Mat& mask = Mat()) 2{ 3 if (mask.empty())mask = Mat::zeros(image.size(), CV_8U); 4 if (disp.type() == CV_8U) 5 { 6 projectImagefromXYZ_<unsigned char>(image, destimage, disp, destdisp, xyz, R, t, K, dist, mask, isSub); 7 } 8 else if (disp.type() == CV_16S) 9 { 10 projectImagefromXYZ_<short>(image, destimage, disp, destdisp, xyz, R, t, K, dist, mask, isSub); 11 } 12 else if (disp.type() == CV_16U) 13 { 14 projectImagefromXYZ_<unsigned short>(image, destimage, disp, destdisp, xyz, R, t, K, dist, mask, isSub); 15 } 16 else if (disp.type() == CV_32F) 17 { 18 projectImagefromXYZ_<float>(image, destimage, disp, destdisp, xyz, R, t, K, dist, mask, isSub); 19 } 20 else if (disp.type() == CV_64F) 21 { 22 projectImagefromXYZ_<double>(image, destimage, disp, destdisp, xyz, R, t, K, dist, mask, isSub); 23 } 24}

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

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

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

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

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

guest

回答2

0

Mat mask = Mat() に変更したらどうでしょう

投稿2018/12/27 06:13

fana

総合スコア11656

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

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

yumetodo

2018/12/27 06:18

なぜかというとMat()の評価結果はrvalueであり、lvalue referenceでは束縛できないからです
guest

0

ベストアンサー

リンク先のサンプルコードを確認しましたが、参照引数にデフォルト引数をつけるなど、あまり行儀のいい書き方ではないように感じました。
また、このサンプルコードが7年前に書かれていると言う点も考慮すべきかと思います。

  1. 356行目、以下のように書き換えます。

C++

1bool isSub=true,Mat& mask=Mat()) 23bool isSub, Mat& mask)
  1. 445行目を以下のように書き換えます。

C++

1projectImagefromXYZ(image,destimage,disp,destdisp,xyz,R,t,K,dist,isSub); 23Mat mask = Mat::zeros(image.size(), CV_8U); 4projectImagefromXYZ(image,destimage,disp,destdisp,xyz,R,t,K,dist,isSub, mask);

これで、ビルドは通るんではないかと思います。
すみません、手元にWindowsビルド環境が無いため、試してはいません。

投稿2018/12/27 06:30

kazto

総合スコア7196

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問