2

私はこのマトリックスを持っています、

0 1 0
1 0 1
0 1 0

そして、各1値要素を0に、またはその逆に切り替えたいと思います。

1 0 1
0 1 0
1 0 1

ビット単位の補数演算子を使用すると、つまりdst = ~srcこの結果が得られます

255 254 255
254 255 254
255 254 255

当然のことながら、算術演算とループ処理を使用して、必要な結果を得ることができます。しかし、OpenCVで必要なマトリックスを実現する簡単な方法はありますか?ありがとう。

アップデート:

コードスニペットは次のとおりです。

#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

int main()
{
    cv::Mat a = (cv::Mat_<uchar>(3,3) << 0, 1, 0,
                                         1, 0, 1, 
                                         0, 1, 0 );
    cv::Mat b = ~a;
    std::cout << b << std::endl;

    return 0;
}
4

4 に答える 4

4

onesとだけがある場合はzeros、次のように実行できます。

cv::Mat b = 1 - a;

于 2013-01-18T19:26:43.090 に答える
3

もう1つのオプションは

dst = 1 - src;

ただし、配列の[1、0]にないものが含まれる場合、これは失敗します。

于 2013-01-18T19:27:46.380 に答える
1

これを試して:

dst = src ? 0 : 1;

srcこれにより、値が暗黙的にに変換されboolます。それ以外の値もそのステートメントを使用するように設定されることに
注意してください。src10

于 2013-01-18T19:02:20.267 に答える
1

これが別の解決策です

dst = !src 

入力する文字を節約できます

于 2013-01-18T19:23:26.913 に答える