首页 > 编程语言 >C# OpenCvSharp Mat操作-操作符重载

C# OpenCvSharp Mat操作-操作符重载

时间:2024-06-13 18:31:15浏览次数:26  
标签:Mat img C# ImShow Cv2 运算符 OpenCvSharp 图像

在C#中使用OpenCvSharp进行图像处理时,操作符重载可以使代码更加简洁和直观。下面是对每个操作符的详细解释及示例代码。

“+” 运算符

作用或原理:+ 运算符可以在 Mat 与 Mat 之间进行,也可以在 Mat 和一个数字之间进行加运算。使用加运算可以改变图像亮度,也可以实现两幅图像的融合。

示例代码:

using OpenCvSharp;

class Program
{
    static void Main()
    {
        // 读取两张图像
        Mat img1 = Cv2.ImRead("image1.jpg");
        Mat img2 = Cv2.ImRead("image2.jpg");

        // 图像融合
        Mat result = img1 + img2;
        Cv2.ImShow("Fused Image", result);

        // 增加亮度
        Mat brighterImg = img1 + 50; // 每个像素值加50
        Cv2.ImShow("Brighter Image", brighterImg);

        Cv2.WaitKey(0);
    }
}

注意:在相加之后,像素值可能会超过255,需要进行处理。可以将像素值乘上一个比例因子然后再相加。

“-” 运算符

作用或原理:- 运算符是 + 运算的逆运算,可以在 Mat 与 Mat 之间进行,也可以在 Mat 和一个数字之间进行减运算。使用减运算可以改变图像亮度,也可以得到两幅图像的差分结果,突出显示某些细节特征。

示例代码:

using OpenCvSharp;

class Program
{
    static void Main()
    {
        // 读取两张图像
        Mat img1 = Cv2.ImRead("image1.jpg");
        Mat img2 = Cv2.ImRead("image2.jpg");

        // 图像差分
        Mat diff = img1 - img2;
        Cv2.ImShow("Difference Image", diff);

        // 减少亮度
        Mat darkerImg = img1 - 50; // 每个像素值减50
        Cv2.ImShow("Darker Image", darkerImg);

        Cv2.WaitKey(0);
    }
}

注意:相减之后的结果可能为负,可以将所有小于0的值赋值为0,或者取绝对值。

“×” 运算符

作用或原理:× 运算符可以在 Mat 与 Mat 之间进行,也可以在 Mat 和一个数字之间进行乘运算。使用乘运算可以改变图像亮度,或提取二值图像中的值为“1”的部分。

示例代码:

using OpenCvSharp;

class Program
{
    static void Main()
    {
        // 读取图像
        Mat img = Cv2.ImRead("image.jpg");

        // 增加亮度
        Mat brighterImg = img * 1.2; // 每个像素值乘以1.2
        Cv2.ImShow("Brighter Image", brighterImg);

        // 提取二值图像中的值为“1”的部分
        Mat binaryImg = new Mat();
        Cv2.Threshold(img, binaryImg, 128, 255, ThresholdTypes.Binary);
        Mat extracted = img * binaryImg;
        Cv2.ImShow("Extracted Image", extracted);

        Cv2.WaitKey(0);
    }
}

注意:如果两个 Mat 相乘,其结果通常远大于255,可以将 Mat 先乘上一个比较小的比例因子。

“÷” 运算符

作用或原理:÷ 运算符是 × 运算的逆运算,可以在 Mat 与 Mat 之间进行,也可以在 Mat 和一个数字之间进行除运算。使用除运算可以改变图像亮度。

示例代码:

using OpenCvSharp;

class Program
{
    static void Main()
    {
        // 读取图像
        Mat img = Cv2.ImRead("image.jpg");

        // 减少亮度
        Mat darkerImg = img / 1.2; // 每个像素值除以1.2
        Cv2.ImShow("Darker Image", darkerImg);

        // 图像校正
        Mat correctionFactor = new Mat(img.Size(), MatType.CV_32F, new Scalar(1.2));
        Mat correctedImg = img / correctionFactor;
        Cv2.ImShow("Corrected Image", correctedImg);

        Cv2.WaitKey(0);
    }
}

注意:进行除法运算时,需要确保除数不为零,否则会导致计算错误。

通过这些示例代码,可以更好地理解如何在C#中使用OpenCvSharp进行图像处理,并合理使用操作符重载来简化代码和提高效率。

标签:Mat,img,C#,ImShow,Cv2,运算符,OpenCvSharp,图像
From: https://blog.csdn.net/cncWay/article/details/139610782

相关文章

  • CPN Tools学习——时间和队列【重要】
    -TimedColorSets时间颜色集-TokenStamps令牌时间戳-EventClock全局/事件/模拟时钟-TimeDelaysonTransitions过渡的时间延迟-ListColorSet列表颜色集-Queue排队1.时间颜色集在定时CPN模型令牌中有:(1)象征性的颜色(2)时间戳:时间戳是一个非负整数.句法:1`e@+表......
  • 【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
      ......
  • CSharpe中的IO+NPOI+序列化
    CSharpe中的IO+NPOI+序列化文件文件夹操作学习一下常见的文件、文件夹的操作。什么是IO流?I:就是inputO:就是output,故称:输入输出流将数据读入内存或者内存输出的过程。常见的IO流操作,一般说的是[内存]与[磁盘]之间的输入输出。作用持久化数据,保证数据不再丢失!文件操作......
  • Conntrack 监控,别等故障了再回来加监控
    这是专栏第8篇,介绍一下node-exporter的conntrack插件。这个插件大家平时关注可能较少,但是在一些场景下,比如防火墙、NAT网关等,需要监控conntrack表的使用情况。我就遇到过一次生产事故,就是因为conntract表满了,导致新连接无法建立,所以这个插件还是很有用的。conntrack......
  • 代理离线服务器yum、curl命令访问网络
    在CentOS7上,你可以使用Squid作为代理服务器。以下是在CentOS7上设置代理的简要步骤:1.在可以上网的服务器上安装Squid:sudoyuminstallsquid2.配置Squid:打开Squid配置文件进行编辑:sudonano/etc/squid/squid.conf找到并编辑以下行(确保取消注释并设置合适的值):http_access......
  • 工业通讯协议(四)- OPCUA
    参考:https://www.opc-router.com/what-is-opc-ua/#:~:text=Inthiscontext%2CthemeaningofUAin,COM%2FDCOMtopurelybinaryTCP%2FIPoralternativelySOAP.https://github.com/OPCFoundation/UA-.NETStandard一.OPC介绍OPC(OLEforProcessControl)协议是一种用于......
  • kuberbetes-PVC与PV的创建 和绑定
    PVC与PV的创建如下yaml文件apiVersion:v1kind:PersistentVolume#PV是集群中的一块存储,可以由PVC请求并使用。-虚拟存储-实体机的存储、不是容器中的存储metadata:name:postgresql-pvnamespace:ops-systemspec:storageClassName:nfs#指定了与此PV关联......
  • 42、k8s-数据存储-高级存储-pv和pvc、NFS服务器
    PV(PersistentVolume)是持久化卷的意思、是对底层的共享存储的一种抽象、一般情况下PV有kubernetes管理员进行创建和配置、他与底层具体的共享存储技术有关、并通过插件完成于共享存储的对接PVC(PersistentVolumeClaim)是持久卷声明的意思、是用户对于存储需求的一种声明、换句话......
  • SFC命令的基本用法,以及处理基本系统文件问题的能力,为系统维护和故障排除提供基础支持;S
    SFC命令初级应用大纲1.理解SFC命令命令简介:了解SFC(SystemFileChecker)命令的作用和基本原理。掌握SFC命令的基本语法和用法。2.执行基本系统文件检查运行SFC扫描:学习如何以管理员身份在命令提示符或Powershell中运行SFC扫描。理解SFC扫描的过程和输出。解......
  • 视频生成模型 Dream Machine 开放试用;微软将停止 Copilot GPTs丨 RTE 开发者日报 Vol.
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......