ページ 1 / 1
OpenCVのMat_()に怪奇文
Posted: 2017年7月23日(日) 08:54
by SBB
暑いにも大変ですが、下記のような怪奇文に遭遇してしまいました
コード:
Mat m =(Mat_<float>(10,20)<<j,i); // i,j はint型
これはどんな操作でしょうか。。。「<<」はシフトの意味でしょうか、何をシフトするの?
Opencv知っている方少ないと思いますが、
あえてここに質問をさせていただきます。
どうか宜しくお願いします
Re: OpenCVのMat_()に怪奇文
Posted: 2017年7月23日(日) 10:15
by usao
間違ってたらすみません.
<<は要素値の設定ではなかったかと.
その文の直後におけるmの要素値はどうなってますか?
(先頭の2つの要素が jの値, iの値 みたいなことになっていませんか?)
Re: OpenCVのMat_()に怪奇文
Posted: 2017年7月23日(日) 14:27
by SBB
早速お返答有難うございます。
アルゴリズムの解読をしているだけで、OpenCVの開発環境を持っていません。
なので、元のコードを実行できません。
「<<」 は シフトでなければ、 ( V<<j, j )のような形で V に (j,i) を設定できるのでしょうか。
C言語にはこんな機能はないではと思いますが。
また宜しくお願いします
Re: OpenCVのMat_()に怪奇文
Posted: 2017年7月23日(日) 15:15
by asd
SBB さんが書きました:
「<<」 は シフトでなければ、 ( V<<j, j )のような形で V に (j,i) を設定できるのでしょうか。
C言語にはこんな機能はないではと思いますが。
C++ではストリームを介して文字出力する際にも<<演算子を使いますね。
とはいえ、coutをシフト演算しているわけではないです。
挿入(流し込む)イメージでとらえてもらえると。
コード:
cout << "Hello,World!" << endl;
ちなみにOpenCVのMatクラスにも<<演算子とカンマ区切りの式にて行列の初期値設定ができると明記されています。
私もすぐに試せる環境がないのですが、usaoさんのおっしゃっているように先頭要素がj,iの順に設定された行列が
定義されるのではないかと思います。
(参考)
http://opencv.jp/opencv-2svn/cpp/basic_ ... s.html#mat
カンマ区切りの初期化子:
// 3x3 の倍精度単位行列を作成します.
Mat M = (Mat_<double>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);
ここでは,まず(後で述べる) Mat_ クラスのコンストラクタに適切なパラメータを与えて呼び出し,さらに << 演算子に続いて,定数,変数,式などから成るカンマ区切りの値を与えています.また,コンパイルエラーを避けるために,カッコが必要なことにも注意してください.
Re: OpenCVのMat_()に怪奇文
Posted: 2017年7月23日(日) 16:56
by SBB
asd様
丁寧なご解説本当にありがとうございました。
C言語って奥深いですね。
さらに勉強しなければ。。。と実感しました。
Re: OpenCVのMat_()に怪奇文
Posted: 2017年7月23日(日) 17:07
by かずま
怪奇に見えますが、実現可能です。
コード:
#include <iostream>
#include <string>
using namespace std;
struct Vec {
string v;
Vec(const string& s = "") : v(s) { }
Vec& operator<<(const string& s) { v = s; return *this; }
Vec& operator,(const string& s) { v += "," + s; return *this; }
};
int main()
{
Vec vec = (Vec() << "abc", "def", "ghi");
cout << vec.v << endl;
}
実行結果