C# と OpenCV の組み合わせ (3) 画像演算、加算、減算、乗算、除算、または非絶対値

画像演算、加算、減算、乗算、除算、OR、XOR

ここでは、画像操作用に列挙型が構築されます。 

public enum ImageOperation

    {
        Add,
        Divide,
        Multiply,
        SubStact,
        And,
        Or,
        Xor,
        Max,
        Min
    }

 画像の操作と操作をカプセル化し、使いやすくします。

1: 画像加算を追加 2つの行列の値を直接加算します。

2: 画像分割を分割し、2 つの行列に対応する値を scr1/scr2*scale で分割します

3:乗算画像を乗算し、2つの行列に対応する値をscr1*scr2*scaleで乗算します

4:SubStact画像減算、2つの行列の対応する値を減算します  

5: そしてそして

6:または または

7: xor 排他的論理和

8: Max 2 つの行列の対応する位置の最大値

9: Min は 2 つの行列の対応する位置の最小値です。

/// <summary>
      /// 图片运算
      /// </summary>
      /// <param name="Srcimage">输入图片1</param>
      /// <param name="Srcimage1">输入图片2</param>
      /// <param name="mode">运算模式</param>
      /// <param name="dst">输出图像</param>
      /// <param name="scale">缩放系数</param>
      /// <exception cref="ArgumentOutOfRangeException"></exception>
        public static void ImageOperation(InputArray Srcimage, InputArray Srcimage1, ImageOperation mode,  OutputArray dst, int scale = 0)
        {
           
            switch (mode)
            {
                case ImageOperation.Add:
                    Cv2.Add(Srcimage, Srcimage1, dst);
                    break;
                case ImageOperation.Divide:
                    Cv2.Divide(Srcimage, Srcimage1, dst, scale);
                    break;
                case ImageOperation.Multiply:
                    Cv2.Multiply(Srcimage, Srcimage1, dst, scale);
                    break;
                case ImageOperation.SubStact:
                    Cv2.Subtract(Srcimage, Srcimage1, dst);
                    break;
                case ImageOperation.And:
                    Cv2.BitwiseAnd(Srcimage, Srcimage1, dst);
                    break;
                case ImageOperation.Or:
                    Cv2.BitwiseOr(Srcimage, Srcimage1, dst);
                    break;
                case ImageOperation.Xor:
                    Cv2.BitwiseXor(Srcimage, Srcimage1, dst);
                    break;
                case ImageOperation.Max:
                    Cv2.Max(Srcimage, Srcimage1, dst);
                    break;
                case ImageOperation.Min:
                    Cv2.Min(Srcimage, Srcimage1, dst);
                    break;
                default:
                    throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
            }
          
        }

画像絶対値

通常、sobel などのエッジ探索アルゴリズムで使用されます。

 Cv2.ConvertScaleAbs(Srcimage, dst);

おすすめ

転載: blog.csdn.net/weixin_43852823/article/details/127744276