C# - Opencv应用(3) 之矩阵Mat使用[图像截取粘贴、ROI操作、位运算、数学计算]

C# - Opencv应用(3) 之矩阵Mat使用[图像截取粘贴、ROI操作、位运算、数学计算]

  • 图像读取,大小、截取、位运算
  • 图像ROI操作:粘贴+赋值、滤波
  • 图像数学计算
  • 部分结果如下:
    在这里插入图片描述

1.图像读取,大小、截取、位运算

        //图像显示private static void showImg(string w_name,Mat img,int flg=0){Cv2.NamedWindow(w_name, 0);Cv2.ImShow(w_name, img);Cv2.WaitKey(flg);}private static void SubMat(){var src = Cv2.ImRead("./images/Lenna.png");if(src.Empty()){Console.WriteLine("请检查图像输入!\n");}else{Console.WriteLine("读取图像大小:[" + src.Rows + "," + src.Cols + "]");}showImg("src", src);// Assign small image to matvar small = new Mat();Cv2.Resize(src, small, new Size(100, 100));src[10, 110, 10, 110] = small;showImg("src1", src);src[370, 470, 400, 500] = small.T();showImg("src2", src);// ↑ This is same as the following://small.T().CopyTo(src[370, 470, 400, 500]);// Get partial mat (similar to cvSetImageROI)Mat part = src[200, 400, 200, 360];// Invert partial pixel valuesCv2.BitwiseNot(part, part);// Fill the region (50..100, 100..150) with color (128, 0, 0)part = src.SubMat(50, 100, 400, 450);part.SetTo(128);using (new Window("SubMat", src)){Cv2.WaitKey();}part.Dispose();}

在这里插入图片描述

2. 图像ROI操作:粘贴+赋值、滤波

  • 针对不同范围的区域即ROI进行不同的操作,根本上是像素/灰度值的改变
        //图像行列中的某些范围做操作private void RowColRangeOperation(){using var src = Cv2.ImRead(ImagePath.Lenna);Cv2.GaussianBlur(src.RowRange(100, 200),src.RowRange(200, 300),new Size(7, 7), 20);Cv2.GaussianBlur(src.ColRange(200, 300),src.ColRange(100, 200),new Size(7, 7), 20);using (new Window("RowColRangeOperation", src)){Cv2.WaitKey();}}/// <summary>/// Submatrix expression operations/// </summary>private void RowColOperation(){using var src = Cv2.ImRead(ImagePath.Lenna);var rand = new Random();for (int i = 0; i < 200; i++){int c1 = rand.Next(100, 400);int c2 = rand.Next(100, 400);using Mat temp = src.Row(c1).Clone();src.Row(c2).CopyTo(src.Row(c1));temp.CopyTo(src.Row(c2));}((Mat)~src.ColRange(450, 500)).CopyTo(src.ColRange(0, 50));src.RowRange(450, 460).SetTo(new Scalar(0, 0, 255));using (new Window("RowColOperation", src)){Cv2.WaitKey();}}

在这里插入图片描述

3.图像数学计算

  • 通过矩阵进行普通与归一化矩阵计算
//数学计算/// <summary>/// Solve equation AX = Y/// </summary>private static void ByMat(){// x + y = 10// 2x + 3y = 26// (x=4, y=6)double[,] av = {{1, 1},{2, 3}};double[] yv = { 10, 26 };var a = new Mat(2, 2, MatType.CV_64FC1, av);var y = new Mat(2, 1, MatType.CV_64FC1, yv);var x = new Mat();Cv2.Solve(a, y, x, DecompTypes.LU);Console.WriteLine("ByMat:");Console.WriteLine("X1 = {0}, X2 = {1}", x.At<double>(0), x.At<double>(1));}/// <summary>/// Solve equation AX = Y/// </summary>private static void ByNormalArray(){// x + y = 10// 2x + 3y = 26// (x=4, y=6)double[,] a = {{1, 1},{2, 3}};double[] y = { 10, 26 };var x = new System.Collections.Generic.List<double>();Cv2.Solve(InputArray.Create(a), InputArray.Create(y),OutputArray.Create(x),DecompTypes.LU);Console.WriteLine("ByNormalArray:");Console.WriteLine("X1 = {0}, X2 = {1}", x[0], x[1]);}

在这里插入图片描述

完整代码

  • 主要代码结构如下:
using System;
using OpenCvSharp;namespace SamplesCore
{/// <summary>/// /// </summary>class MatOperations{static void Main(string[] args){ByMat();ByNormalArray();SubMat();RowColRangeOperation();RowColOperation();return;}//函数定义。。。。。。}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【无标题】广东便携式逆变器的澳洲安全 AS/NZS 4763

便携式逆变器的澳洲安全 AS/NZS 4763 便携式逆变器申请澳大利亚和新西兰SAA认证的时候&#xff0c;需要按照澳洲*用标准AS/NZS 4763: 2011进行测试。立讯检测安规实验室有澳洲AS/NZS 4763: 2011资质授权&#xff0c;为国内多家便携式逆变器客户成功申请澳洲SAA证书 便携式户外…

侯捷C++八部曲(一,面向对象)

头文件和类的声明 inline inline修饰函数&#xff0c;是给编译器的一个建议&#xff0c;到底是否为inline由编译器来决定&#xff0c;inline修饰的函数在使用时是做简单的替换&#xff0c;这样就避免了一些函数栈空间的使用&#xff0c;从能提升效率。从另一种角度看&#xff…

玩转大数据5:构建可扩展的大数据架构

1. 引言 随着数字化时代的到来&#xff0c;大数据已经成为企业、组织和个人关注的焦点。大数据架构作为大数据应用的核心组成部分&#xff0c;对于企业的数字化转型和信息化建设至关重要。我们将探讨大数据架构的基本要素和原则&#xff0c;以及Java在大数据架构中的角色&…

sagment-anything官方代码使用详解

文章目录 一. sagment-anything官方例程说明1. 结果显示函数说明2. SamAutomaticMaskGenerator对象(1) SamAutomaticMaskGenerator初始化参数 3. SamPredictor对象(1) 初始化参数(2) set_image()(3) predict() 二. SamPredictor流程说明1. 导入所需要的库2. 读取图像3. 加载模型…

【NI-RIO入门】Real Time(实时系统解释)

1.什么是实时系统&#xff1f; 实时系统可以非常精确可靠的执行需要特定时许要求的系统&#xff0c;对于许多工程项目来说&#xff0c;通用操作系统&#xff0c;例如WINDOWS等标准PC上运行测量和控制程序是无法精确控制计时的&#xff0c;这些系统很容易受用户的其他程序、图像…

数据挖掘与低代码开发应用:加速业务创新的黄金组合

数据挖掘与低代码开发是当今创新领域的两大热点技术。数据挖掘技术可以从大量数据中发现隐藏的模式和知识&#xff0c;为决策提供有力支持&#xff1b;而低代码开发则使得应用程序的开发变得更加快捷和高效。本文将介绍数据挖掘和低代码开发的概念及其应用&#xff0c;并阐述它…

chromium通信系统-ipcz系统(四)-ipcz-分层、和mojo的关系以及handle

在只有mojo的情况下&#xff0c; 进程间通信都是靠unix 域套接字来完成了&#xff0c;由于这种方式比较低效&#xff0c;并且不够灵活&#xff0c;后来引入了ipcz。 但是系统中基本上使用mojo做进程间通信&#xff0c;想要一步到位迁移到ipcz系统是比较困难的。 所以chrome团队…

GEE:使用拉普拉斯(Laplacian)算子对遥感图像进行卷积操作

作者:CSDN @ _养乐多_ 本文记录了使用拉普拉斯(Laplacian)算子对遥感图像进行卷积操作的代码。并以试验区NDVI图像为例。 研究区真彩色影像、NDVI图像以及Sobel卷积结果如下所示, 文章目录 一、拉普拉斯算子二、完整代码三、代码链接一、拉普拉斯算子 详细介绍参考《遥感…

决策树 算法原理

决策树 算法原理 决策树的原理 决策树: 从训练数据中学习得出一个树状结构的模型 决策树属于判别模型 决策树是一种树状结构&#xff0c;通过做出一系列决策 (选择) 来对数据进行划分&#xff0c;这类似于针对一系列问题进行选择。 决策树的决策过程就是从根节点开始&#…

【halcon】halcon 函数文件 以及 脚本引擎如何调用外部函数文件 下篇

前言 上次在文章《halcon 函数文件 以及 脚本引擎如何调用外部函数文件 上篇》 中讲到如何halcon去封装一个算子。 这篇下篇&#xff0c;承接上篇讲述C#如何使用halcon引擎调用自己封装好算子。 这样的好处很明显&#xff1a; 1 不用修改C#代码&#xff0c;更新脚本就能改变算…

不再只是android,华为自爆Harmony将对标iOS

今年10月&#xff0c;华为官方宣布&#xff0c;鸿蒙OS 4升级设备数量已突破1亿&#xff0c;成为史上升级最快的鸿蒙OS版本。 日前&#xff0c;据数码博主“定焦数码”消息&#xff0c;大厂技术员工做适配&#xff0c;通过线下沟通时&#xff0c;华为反复提到一个问题&#xff…

基于stm32的LCD1602与无线蓝牙温湿度显示

这一篇博客是为了实现温湿度的显示&#xff0c;温湿度传感器将数据穿给单片机&#xff0c;单片机又把数据送给LCD1602和蓝牙&#xff0c;让温度和湿度可以再LCD1602显示屏和手机上显示&#xff0c;它的执行逻辑和C51那里基本一样&#xff0c;就是要修改程序&#xff0c;在程序上…

Windows server——部署DHCP服务(2)

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.配置DHCP服务 1.DHCP安装的要求 安装DHCP服务器需要满足如下要求&#…

计算社会学发展

▶1.社会可计算吗 一些观点认为&#xff0c;个体行为与社会活动规律如此复杂&#xff0c;很难运用严谨的科学方法进行逻辑推理或精确的定量计算。社会可以计算吗?2009年2月&#xff0c;以哈佛大学教授大卫拉泽尔(David Lazer)为首的15位来自美国不同学科的教授联名在《科学》…

python pyaudio显示音频波形图

python pyaudio显示音频波形图 代码如下&#xff1a; import numpy as np import matplotlib.pylab as plb import wave# 读取 wav wf wave.open("./output.wav", "rb")# 获取音频相关参数&#xff1a;声道数、量化位数、采样频率、采样帧数 nchannels,…

【2024秋招】2023-10-17 金山云文档服务端二面

1 实习 1.1 讲解一下curd启动器 1.2 数据同步的过程是怎么实现的&#xff0c;同步过程中的数据一致性怎么保证的 答&#xff1a;同步过程中会记录断点&#xff0c;表示每一批同步成功时的位置&#xff0c;如果对端出现问题&#xff0c;则下一次同步会继续从这个断点后开始同…

大于2T磁盘划分并挂接

需要挂接9T多的磁盘做数据磁盘&#xff0c;记录下操作过程 1、使用fdisk -l识别到磁盘 # fdisk -l|grep 9.5 TiB Disk /dev/sdd: 9.5 TiB, 10453950398464 bytes, 20417871872 sectors Disk /dev/sdf: 9.5 TiB, 10453950398464 bytes, 20417871872 sectors Disk /dev/sdh: 9.…

CentOS7下安装Docker与Docker Compose

目录 Docker简介 Docker安装 Docker Compose简介 Docker Compose安装 Docker简介 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的Linux或Windows操作系统的机器上&#xff0c;也…

2023全网最新-免杀方法大集结

目录 00. 概述 01. 简介 02. 静态免杀 1. 怎么找特征码 工具查找 手工查找 其他 2. 怎么免杀&#xff1f; 手工修改 非源码 工具免杀&#xff08;盲免杀&#xff09; 03. 行为动态免杀 行为拦截原理 如何进行行为免杀呢&#xff1f; 总结 注意/技巧 00. 概述 …

分享全球顶尖的AIGC文生图资源

1 引言 人工智能正在改变许多行业的格局&#xff0c;而其中改变最直观和影响最大的就是AIGC领域的图像创作。文生图技术作为AIGC的一个重要分支&#xff0c;展现了人工智能在视觉创作领域的巨大潜力。发展至今已经有很多AI文生图平台&#xff0c;这是一次革命性的突破&#xf…