私はC++とOpenCVを使用しています。今度は、Mat
タイプ(CV_32FC3
など)を自分のコードで多くのMatsが使用するように定義したいと思います。これを実現するためにOpenCV#Mat Typeの定義タイプ
、私が試した:
#define FLOW_TYPE CV_32FC3;
cv::Mat BaoOpticalFlow::initialize(cv::Mat & frame1, cv::Mat & frame2)
{
cv::Mat flow = cv::Mat(frame1.rows, frame1.cols, FLOW_TYPE);
}
をしかし、これはAと予想エラー
を起こし ')'
は、その後、私は試した表現
を期待しました、
#define FLOW_TYPE CV_32FC3;
cv::Mat BaoOpticalFlow::initialize(cv::Mat & frame1, cv::Mat & frame2)
{
int test = FLOW_TYPE;
cv::Mat flow = cv::Mat(frame1.rows, frame1.cols, test);
}
私の意見ではうまくいくが、これは醜い。
なぜ、どのように動作するのか、なぜ最初のスニペットでエラーが発生するのかわかりません。私はC + +の専門家ではないので、どんな助けもありがとうございます。
素晴らしい!それはそれを修正する。なぜ 'constexpr auto'が' #define'を使うよりも良いのか説明できますか? –
また、 'int test = FLOW_TYPE;'をローカル変数として使うのはなぜですか? –
@WouterFlorijnそれは 'int test = CV_32FC3 ;;'に二重のセミコロンで展開されるので、エラーではありません。 'cv :: Mat flow = cv :: Mat(frame1.rows、frame1.cols、CV_32FC3;);は代わりにエラーです(' CV_32FC3'の後のセミコロンに注意してください)。 – Miki