当前位置: 首页 > news >正文

C# - Opencv应用(2) 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值]

C# - Opencv应用(2) 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值]

  • 矩阵创建
  • 图像显示与保存
  • 像素读取与赋值
  • 新建sample02项目,配置opencv4相关包,新建.cs进行测试

1.矩阵创建

//创建空白矩阵
var dst = new Mat()//创建并赋值
var src = new Mat(new Size(128, 128), MatType.CV_8U, Scalar.All(125))//图像拷贝
Mat dst = src.Clone();

在这里插入图片描述

2.图像显示与保存

private static void test_0()
{//全黑var mat = new Mat(new Size(600, 600), MatType.CV_8UC3, new Scalar(0, 0, 0));Cv2.NamedWindow("black", 0);Cv2.ImShow("black", mat);// 全白mat = new Mat(new Size(600, 600), MatType.CV_8UC3, new Scalar(255, 255, 255));Cv2.NamedWindow("white", 0);Cv2.ImShow("white", mat);Cv2.ImWrite("white.jpg", mat);
}

在这里插入图片描述

3.像素读取与赋值

  • 两种常用的图像遍历方式
        private void GetSet(){using var mat = new Mat(ImagePath.Lenna, ImreadModes.Color);for (int y = 0; y < mat.Height; y++){for (int x = 0; x < mat.Width; x++){Vec3b color = mat.Get<Vec3b>(y, x);Vec3b newColor = new Vec3b(color.Item2, color.Item1, color.Item0);mat.Set<Vec3b>(y, x, newColor);}}Cv2.ImShow("Slow", mat);Cv2.WaitKey(0);Cv2.DestroyAllWindows();}/// <summary>/// Reasonably fast/// </summary>private void GenericIndexer(){using var mat = new Mat(ImagePath.Lenna, ImreadModes.Color);var indexer = mat.GetGenericIndexer<Vec3b>();for (int y = 0; y < mat.Height; y++){for (int x = 0; x < mat.Width; x++){Vec3b color = indexer[y, x];Vec3b newColor = new Vec3b(color.Item2, color.Item1, color.Item0);indexer[y, x] = newColor;}}Cv2.ImShow("GenericIndexer", mat);Cv2.WaitKey(0);Cv2.DestroyAllWindows();}
  • 灰度图操作
 private static void test_1(){var img = new Mat(new Size(128, 128), MatType.CV_8U, 1);var pixel = img.GetGenericIndexer<int>();for (var y = 0; y < img.Height; y++){for (var x = 0; x < img.Width; x++){pixel[y, x] = x + y;}}Cv2.NamedWindow("单通道",0);Cv2.ImShow("单通道", img);Cv2.WaitKey(0);
}

在这里插入图片描述

  • 三通道图操作
private static void test_2()
{//三通道using (var src = new Mat(new Size(128, 128), MatType.CV_8UC3, new Scalar(20, 129, 250)))using (var dst = new Mat()){for (var y = 0; y < src.Height; y++){for (var x = 0; x < src.Width; x++){var color = src.Get<Vec3b>(y, x);var temp = color.Item0;color.Item0 = color.Item2; // B <- Rcolor.Item2 = temp;        // R <- Bsrc.Set(y, x, color);}}src.CopyTo(dst);Mat dat = dst.Clone();Cv2.NamedWindow("dst", 0);Cv2.ImShow("dst", dst);Cv2.WaitKey(0);}
}

在这里插入图片描述

  • 完整代码
using OpenCvSharp;namespace OpenCVSharpSample01
{class Program{static void Main(string[] args){test_0();test_1();test_2();}private static void test_0(){var mat = new Mat(new Size(600, 600), MatType.CV_8UC3, new Scalar(0, 0, 0));Cv2.NamedWindow("black", 0);Cv2.ImShow("black", mat);// 全白mat = new Mat(new Size(600, 600), MatType.CV_8UC3, new Scalar(255, 255, 255));Cv2.NamedWindow("white", 0);Cv2.ImShow("white", mat);Cv2.ImWrite("white.jpg", mat);}private static void test_1(){var img = new Mat(new Size(128, 128), MatType.CV_8U, 1);var pixel = img.GetGenericIndexer<int>();for (var y = 0; y < img.Height; y++){for (var x = 0; x < img.Width; x++){pixel[y, x] = x + y;}}Cv2.NamedWindow("单通道",0);Cv2.ImShow("单通道", img);Cv2.WaitKey(0);}private static void test_2(){//三通道using (var src = new Mat(new Size(128, 128), MatType.CV_8U, Scalar.All(125)))using (var dst = new Mat()){for (var y = 0; y < src.Height; y++){for (var x = 0; x < src.Width; x++){var color = src.Get<Vec3b>(y, x);var temp = color.Item0;color.Item0 = color.Item2; // B <- Rcolor.Item2 = temp;        // R <- Bsrc.Set(y, x, color);}}src.CopyTo(dst);Mat dat = dst.Clone();Cv2.NamedWindow("dst", 0);Cv2.ImShow("dst", dst);Cv2.WaitKey(0);}}}
}

相关文章:

C# - Opencv应用(2) 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值]

C# - Opencv应用&#xff08;2&#xff09; 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值] 矩阵创建图像显示与保存像素读取与赋值新建sample02项目&#xff0c;配置opencv4相关包&#xff0c;新建.cs进行测试 1.矩阵创建 //创建空白矩阵 var dst new Mat()//创建并赋…...

执行npm的时候报权限问题的解决方案

我们在执行npm操作的过程中&#xff0c;会出现以下权限问题&#xff0c;解决方案: 管理员身份 运行cmd 切换目录到要执行命令的文件下 再进行npm操作即可...

【实用】PPT没几页内存很大怎么解决

PPT页数很少但导出内存很大解决方法 1.打开ppt点击左上角 “文件”—“选项” 2.对话框选择 “常规与保存” &#xff08;1&#xff09;如果想要文件特别小时可 取消勾选 “将字体嵌入文件” &#xff08;2&#xff09;文件大小适中 可选择第一个选项 “仅最入文档中所用的字…...

【Docker】从零开始:8.Docker命令:Commit提交命令

【Docker】从零开始&#xff1a;8.Docker命令:Commit命令 基本概念镜像镜像分层什么是镜像分层为什么 Docker 镜像要采用这种分层结构 本章要点commit 命令命令格式docker commit 操作参数实例演示1.下载一个新的ubuntu镜像2.运行容器3.查看并安装vim4.退出容器5提交自己的镜像…...

【深度学习】神经网络术语:Epoch、Batch Size和迭代

batchsize&#xff1a;中文翻译为批大小&#xff08;批尺寸&#xff09;。 简单点说&#xff0c;批量大小将决定我们一次训练的样本数目。 batch_size将影响到模型的优化程度和速度。 为什么需要有 Batch_Size : batchsize 的正确选择是为了在内存效率和内存容量之间寻找最…...

谈谈你对mvc和mvvm的理解

MVC和MVVM是软件开发中两种常见的架构模式&#xff0c;各自有不同的优缺点。 MVC&#xff08;Model-View-Controller&#xff09;是一种经典的架构模式&#xff0c;将应用程序分为三个部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和…...

C语言每日一题(35)有效的括号

力扣网 20 有效的括号 题目描述 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右…...

【DevOps】Git 图文详解(七):标签管理

Git 图文详解&#xff08;七&#xff09;&#xff1a;标签管理 标签&#xff08;Tags&#xff09;指的是某个分支某个特定时间点的状态&#xff0c;是对某一个提交记录的 固定 “指针” 引用。一经创建&#xff0c;不可移动&#xff0c;存储在工作区根目录下 .git\refs\tags。可…...

BootStrap【表格二、基础表单、被支持的控件、表单状态】(二)-全面详解(学习总结---从入门到深化)

目录 表格二 表单_基础表单 表单_被支持的控件 表单_表单状态 表格二 紧缩表格 通过添加 .table-condensed 类可以让表格更加紧凑&#xff0c;单元格中的内补&#xff08;padding&#xff09;均会减半 <table class"table table-condensed table-bordered"…...

亿赛通电子文档安全管理系统UploadFileFromClientServiceForClient接口存在任意文件上传漏洞 附POC

@[toc] 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 亿赛通电子文档安全管理系统接口简介 微信…...

SPSS系统聚类

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…...

【ArcGIS Pro微课1000例】0033:ArcGIS Pro处理cad数据(格式转换、投影变换)

文章目录 一、cad dwg转shp1. 导出为shp2. cad至地理数据库3. data interoperability tools二、shp投影变换一、cad dwg转shp 1. 导出为shp 加载cad数据,显示如下: 选择需要导出的数据,如面状,右键→数据→导出要素: 导出要素参数如下,点击确定。 导出的要素不带空间参…...

【小呆的力学笔记】有限元专题之循环对称结构有限元原理

文章目录 1. 循环对称问题的提出2. 循环对称条件2.1 节点位移的循环对称关系2.2 节点内力的循环对称关系 3. 在平衡方程中引入循环对称条件 1. 循环对称问题的提出 许多工程结构都是其中某一扇面的n次周向重复&#xff0c;也就是是周期循环对称结构。如果弹性体的几何形状、约…...

云端导览,数字互动 | 拓世法宝AI数字人一体机助力全新旅游时代

《中国旅行消费趋势洞察白皮书&#xff08;2023版&#xff09;》显示&#xff0c;消费者旅行习惯已从“到此一游”变为“深度在地”&#xff0c;更强调在旅游中充实自我、学习新知识。 &#xff08;《中国旅行消费趋势洞察白皮书&#xff08;2023版》截图&#xff09; 从这些资…...

PTA-快速幂

要求实现一个递归函数&#xff0c;高效求ab(1≤a,b≤62,ab<263)。 函数接口定义&#xff1a; long long int pow(int a, int b); 其中a 、b 是用户传入的参数。 裁判测试程序样例&#xff1a; #include<iostream> using namespace std; long long int pow(int a,…...

【深度学习】Transformer简介

近年来&#xff0c;Transformer模型在自然语言处理&#xff08;NLP&#xff09;领域中横扫千军&#xff0c;以BERT、GPT为代表的模型屡屡屠榜&#xff0c;目前已经成为了该领域的标准模型。同时&#xff0c;在计算机视觉等领域中&#xff0c;Transformer模型也逐渐得到了重视&a…...

Linux 是否被过誉了?

Linux 是否被过誉了&#xff1f; 有些人眼里&#xff0c;电脑这种东西就应该是华丽丽的桌面&#xff0c;手握鼠标戳戳按钮&#xff0c;键盘只为偶尔打打字&#xff0c;仿佛windows式的桌面形式才是理所应当&#xff0c;GUI才是理所应当&#xff0c;x86才是理所应当&#xff0c…...

【SpringBoot篇】Spring_Task定时任务框架

文章目录 &#x1f339;概述&#x1f33a;应用场景&#x1f384;cron表达式&#x1f6f8;入门案例&#x1f38d;实际应用 &#x1f339;概述 Spring Task 是 Spring 框架提供的一种任务调度和异步处理的解决方案。可以按照约定的时间自动执行某个代码逻辑它可以帮助开发者在 S…...

智能导视电子指路牌是什么?

SVIP-3800系列智能电子指路牌也称智慧指路灯杆&#xff0c;智能指路牌&#xff0c;导航立柱&#xff0c;多功能指示牌&#xff0c;多功能路标&#xff0c;智能指路机器人&#xff0c;智能导视指路牌&#xff0c;问路导航机器人&#xff0c;智能路牌&#xff0c;叁仟智慧路牌、智…...

Android 13.0 无源码app修改它的icon图标

1.概述 在13.0的系统产品rom定制化开发中,有些产品需要对Launcher3中桌面显示的app的icon做替换,如果没有源码的话更换会麻烦点,需要从pms解析app的时候, 可以替换掉app的icon图标就可以了,接下来就来实现相关的功能 2.无源码app修改它的icon图标的相关核心类 framework…...

video-subtitle-extractor:本地AI字幕提取终极方案深度解析

video-subtitle-extractor&#xff1a;本地AI字幕提取终极方案深度解析 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测、字…...

从‘双K模型’到齐次化:一个高中老师如何用‘平移坐标系’讲透解析几何的降维打击

坐标系平移&#xff1a;让解析几何难题降维的数学教学艺术 数学教育中最高明的技巧&#xff0c;往往不是发明新工具&#xff0c;而是教会学生用已有知识解决看似复杂的问题。坐标系平移就是这样一把金钥匙——它藏在课本的角落里&#xff0c;却能在解析几何难题中打开一扇通往简…...

llama.cpp CUDA Graphs优化:大模型推理性能提升1.2倍

1. 项目概述llama.cpp是一个基于GGML库的轻量级C框架&#xff0c;专门用于在个人工作站上高效运行Meta Llama系列大语言模型的推理任务。该项目自2023年发布以来&#xff0c;凭借其简洁的C实现、低依赖性和出色的性能表现&#xff0c;迅速成为GitHub上最受欢迎的AI项目之一&…...

vben-admin-thin-next完整指南:10个核心功能深度解析

vben-admin-thin-next完整指南&#xff1a;10个核心功能深度解析 【免费下载链接】vben-admin-thin-next vue-vben-admin-2.0 mini template.vue3,vite,typescript 项目地址: https://gitcode.com/gh_mirrors/vb/vben-admin-thin-next vben-admin-thin-next是一个免费开…...

如何用LeagueAkari智能工具集提升英雄联盟游戏效率的完整指南

如何用LeagueAkari智能工具集提升英雄联盟游戏效率的完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit LeagueAkari是一款基于英雄联盟官…...

十大Web安全扫描工具

十大Web安全扫描工具 扫描程序可以在帮助造我们造就安全的Web站点上助一臂之力&#xff0c;也就是说在黑客“黑”你之前&#xff0c;先测试一下自己系统中的漏洞。我们在此推荐10大Web漏洞扫描程序&#xff0c;供您参考。 Nikto 这是一个开源的Web服务器扫描程序&#xff0c;它…...

【稀缺首发】LLM偏见统计检测架构图(ISO/IEC 23894兼容版):R语言实现的6层验证流水线与37项FAIR指标计算规范

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;LLM偏见统计检测架构图的ISO/IEC 23894合规性总览 ISO/IEC 23894:2023《Artificial intelligence — Guidance on risk management for AI》为大语言模型&#xff08;LLM&#xff09;偏见检测系统提供了…...

YimMenu:GTA5最强防护与增强工具完整指南

YimMenu&#xff1a;GTA5最强防护与增强工具完整指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu Yim…...

python pyright

从Python开发者的角度看Pyright&#xff1a;一个被低估的类型检查工具 做Python开发这些年&#xff0c;类型检查这事儿一直挺有意思。早期大家觉得动态类型是Python的“优势”&#xff0c;后来随着代码规模增长&#xff0c;越来越多的人开始拥抱类型注解。而说到类型检查工具&a…...

基于云模型-MABAC决策框架的冷链物流供应商选择研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...