web-dev-qa-db-ja.com

OpenCVマットのすべてのピクセルを特定の値に設定する方法は?

タイプCV_8UC1の画像があります。すべてのピクセル値を特定の値に設定するにはどうすればよいですか?

19
Drew Noakes
  • グレースケール画像の場合:

    cv::Mat m(100, 100, CV_8UC1); //gray 
    m = Scalar(5);  //used only Scalar.val[0] 
    

    または

    cv::Mat m(100, 100, CV_8UC1); //gray 
    m.setTo(Scalar(5));  //used only Scalar.val[0] 
    

    または

    Mat mat = Mat(100, 100, CV_8UC1, cv::Scalar(5));
    
  • カラー画像の場合(3チャンネルなど)

    cv::Mat m(100, 100, CV_8UC3); //3-channel 
    m = Scalar(5, 10, 15);  //Scalar.val[0-2] used 
    

    または

    cv::Mat m(100, 100, CV_8UC3); //3-channel 
    m.setTo(Scalar(5, 10, 15));  //Scalar.val[0-2] used 
    

    または

    Mat mat = Mat(100, 100, CV_8UC3, cv::Scalar(5,10,15));
    

P.S。:チェックアウト このスレッド さらにcv::Mat他のチャネルを変更せずに、特定の値に効率的に変更します。

51
herohuyongtao

cv::Matの割り当て演算子は、次のようにcv::Scalarの割り当てを許可するために実装されています。

// Create a greyscale image
cv::Mat mat(cv::Size(cols, rows), CV_8UC1);

// Set all pixel values to 123
mat = cv::Scalar:all(123);

ドキュメント の説明:

Mat&Mat :: operator =(const Scalar&s)

s –各行列要素に割り当てられたスカラー。マトリックスのサイズまたはタイプは変更されません。

8
Drew Noakes

別の方法で使用できます

Mat :: setTo

お気に入り

      Mat src(480,640,CV_8UC1);
      src.setTo(123); //assign 123
3
Haris