C#联合OpenCV(三)图像的运算、加减乘除与或非绝对值

图像的运算、加减乘除与或、异或

此处对图像的运算构建一个枚举类型 

public enum ImageOperation

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

 对图像的操作运行进行封装,方便使用。

1:Add  图像相加   两个矩阵的值直接进行加

2:Divide 图像相除,两个矩阵对应的值进行除   scr1/scr2*scale

3: Multiply 图像相乘,两个矩阵对应的值进行乘   scr1*scr2*scale

4:SubStact 图像相减,两个矩阵对应的值进行减  

5:And 与

6:or  或

7:xor  异或

8:Max  两个矩阵对应位置的最大值

9:Min  两个矩阵对应位置的最小值

/// <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);

当然可以。在Python中,我们可以使用OpenCV (cv2) 和 Numpy 进行图像处理,包括基本的算术运算加减乘除以及位运算(如与、或)。下面是一个简单的例子,展示了如何实现这些操作: ```python import cv2 import numpy as np # 加法示例 img1 = cv2.imread('image1.jpg', cv2.IMREAD_GRAYSCALE) img2 = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE) # 加法 result_add = img1 + img2 # 注意这里的结果通常是整数,需要将结果转换回uint8类型(范围0-255)以便于查看图像 result_add = np.clip(result_add, 0, 255).astype(np.uint8) # 减法 result_subtract = img1 - img2 # 乘法 result_multiply = img1 * img2 # 除法,这里需要检查除数是否为零,避免错误 result_divide = np.divide(img1, img2, out=np.zeros_like(img1), where=img2 != 0) # 对于位运算,我们先将图像转为二值(这里仅做演示) img1_binary = np.where(img1 > 127, 255, 0) img2_binary = np.where(img2 > 127, 255, 0) # 与运算 result_and = img1_binary & img2_binary # 或运算 result_or = img1_binary | img2_binary cv2.imshow("Add", result_add) cv2.imshow("Subtract", result_subtract) cv2.imshow("Multiply", result_multiply) cv2.imshow("Divide", result_divide) cv2.imshow("And", result_and) cv2.imshow("Or", result_or) cv2.waitKey(0) cv2.destroyAllWindows() ``` 请注意,这个示例假设你已经有了两个灰度图像是'image1.jpg'和'image2.jpg'。在实际应用中,你需要替换这些文件路径,并根据图像内容调整阈值或操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值