暑いにも大変ですが、下記のような怪奇文に遭遇してしまいました
これはどんな操作でしょうか。。。「<<」はシフトの意味でしょうか、何をシフトするの?
Opencv知っている方少ないと思いますが、
あえてここに質問をさせていただきます。
どうか宜しくお願いします
OpenCVのMat_()に怪奇文
Re: OpenCVのMat_()に怪奇文
間違ってたらすみません.
<<は要素値の設定ではなかったかと.
その文の直後におけるmの要素値はどうなってますか?
(先頭の2つの要素が jの値, iの値 みたいなことになっていませんか?)
<<は要素値の設定ではなかったかと.
その文の直後におけるmの要素値はどうなってますか?
(先頭の2つの要素が jの値, iの値 みたいなことになっていませんか?)
Re: OpenCVのMat_()に怪奇文
早速お返答有難うございます。
アルゴリズムの解読をしているだけで、OpenCVの開発環境を持っていません。
なので、元のコードを実行できません。
「<<」 は シフトでなければ、 ( V<<j, j )のような形で V に (j,i) を設定できるのでしょうか。
C言語にはこんな機能はないではと思いますが。
また宜しくお願いします
アルゴリズムの解読をしているだけで、OpenCVの開発環境を持っていません。
なので、元のコードを実行できません。
「<<」 は シフトでなければ、 ( V<<j, j )のような形で V に (j,i) を設定できるのでしょうか。
C言語にはこんな機能はないではと思いますが。
また宜しくお願いします
Re: OpenCVのMat_()に怪奇文
C++ではストリームを介して文字出力する際にも<<演算子を使いますね。SBB さんが書きました: 「<<」 は シフトでなければ、 ( V<<j, j )のような形で V に (j,i) を設定できるのでしょうか。
C言語にはこんな機能はないではと思いますが。
とはいえ、coutをシフト演算しているわけではないです。
挿入(流し込む)イメージでとらえてもらえると。
ちなみに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_ クラスのコンストラクタに適切なパラメータを与えて呼び出し,さらに << 演算子に続いて,定数,変数,式などから成るカンマ区切りの値を与えています.また,コンパイルエラーを避けるために,カッコが必要なことにも注意してください.
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
Re: OpenCVのMat_()に怪奇文
怪奇に見えますが、実現可能です。
実行結果
#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;
}