1

cv::Matopencv 2.0クラスでスカラー値を加算、減算する最も簡単な方法を見つけようとしています。

既存の関数のほとんどは、行列-行列および行列-スカラー演算のみを許可します。

スカラー行列演算を探しています。

私は現在、同じスカラー値で一時行列を作成し、必要な算術演算を実行することによってそれを行っています。以下の例。

Mat M(Size(100,100), CV_8U);
Mat temp = Mat::ones(100, 100, CV_8U)*255; 
M = temp-M;

しかし、私はそれを行うためのより良い/より簡単な方法があるべきだと思います。

助言がありますか ?

4

2 に答える 2

5

int または double から Mat 式を初期化することはできません。解決策は、単一チャネルの行列であっても、cv::Scalar を使用することです。

Mat M = Mat::ones(Size(100, 100), CV_8U);
M = Scalar::all(255) - M;

可能な Mat 式のリストについては、http://docs.opencv.org/modules/core/doc/basic_structures.html#matrixexpressionsを参照してください。

于 2010-06-13T21:40:44.590 に答える
0

おそらくこれは 2.1 の機能か、2.1 と現在のトランク バージョンの間のどこかの機能ですが、これは私にとっては問題なく機能します。

Mat cc = channels[k];
    double fmin,fmax;
    cv::minMaxLoc( cc, &fmin, &fmax );
    if( fmax > 1.0 )
        fmax = 255.0 ;
else
fmax = 1.0;
cc = ( cc / (fmax + 1e-9) );

チャンネルは次から来ています:

channels = vector<Mat>(3);
cv::split( img, channels );

したがって、少なくとも 2.1 / 現在の SVN ブランチでは、必ずスカラー式を使用してください。上記を 2.0 で試すとどうなりますか?

于 2010-11-21T18:45:51.250 に答える