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应用(2) 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值] 矩阵创建图像显示与保存像素读取与赋值新建sample02项目,配置opencv4相关包,新建.cs进行测试 1.矩阵创建 //创建空白矩阵 var dst new Mat()//创建并赋…...
执行npm的时候报权限问题的解决方案
我们在执行npm操作的过程中,会出现以下权限问题,解决方案: 管理员身份 运行cmd 切换目录到要执行命令的文件下 再进行npm操作即可...
【实用】PPT没几页内存很大怎么解决
PPT页数很少但导出内存很大解决方法 1.打开ppt点击左上角 “文件”—“选项” 2.对话框选择 “常规与保存” (1)如果想要文件特别小时可 取消勾选 “将字体嵌入文件” (2)文件大小适中 可选择第一个选项 “仅最入文档中所用的字…...
【Docker】从零开始:8.Docker命令:Commit提交命令
【Docker】从零开始:8.Docker命令:Commit命令 基本概念镜像镜像分层什么是镜像分层为什么 Docker 镜像要采用这种分层结构 本章要点commit 命令命令格式docker commit 操作参数实例演示1.下载一个新的ubuntu镜像2.运行容器3.查看并安装vim4.退出容器5提交自己的镜像…...
【深度学习】神经网络术语:Epoch、Batch Size和迭代
batchsize:中文翻译为批大小(批尺寸)。 简单点说,批量大小将决定我们一次训练的样本数目。 batch_size将影响到模型的优化程度和速度。 为什么需要有 Batch_Size : batchsize 的正确选择是为了在内存效率和内存容量之间寻找最…...
谈谈你对mvc和mvvm的理解
MVC和MVVM是软件开发中两种常见的架构模式,各自有不同的优缺点。 MVC(Model-View-Controller)是一种经典的架构模式,将应用程序分为三个部分:模型(Model)、视图(View)和…...
C语言每日一题(35)有效的括号
力扣网 20 有效的括号 题目描述 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右…...
【DevOps】Git 图文详解(七):标签管理
Git 图文详解(七):标签管理 标签(Tags)指的是某个分支某个特定时间点的状态,是对某一个提交记录的 固定 “指针” 引用。一经创建,不可移动,存储在工作区根目录下 .git\refs\tags。可…...
BootStrap【表格二、基础表单、被支持的控件、表单状态】(二)-全面详解(学习总结---从入门到深化)
目录 表格二 表单_基础表单 表单_被支持的控件 表单_表单状态 表格二 紧缩表格 通过添加 .table-condensed 类可以让表格更加紧凑,单元格中的内补(padding)均会减半 <table class"table table-condensed table-bordered"…...
亿赛通电子文档安全管理系统UploadFileFromClientServiceForClient接口存在任意文件上传漏洞 附POC
@[toc] 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 亿赛通电子文档安全管理系统接口简介 微信…...
SPSS系统聚类
前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为: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次周向重复,也就是是周期循环对称结构。如果弹性体的几何形状、约…...
云端导览,数字互动 | 拓世法宝AI数字人一体机助力全新旅游时代
《中国旅行消费趋势洞察白皮书(2023版)》显示,消费者旅行习惯已从“到此一游”变为“深度在地”,更强调在旅游中充实自我、学习新知识。 (《中国旅行消费趋势洞察白皮书(2023版》截图) 从这些资…...
PTA-快速幂
要求实现一个递归函数,高效求ab(1≤a,b≤62,ab<263)。 函数接口定义: long long int pow(int a, int b); 其中a 、b 是用户传入的参数。 裁判测试程序样例: #include<iostream> using namespace std; long long int pow(int a,…...
【深度学习】Transformer简介
近年来,Transformer模型在自然语言处理(NLP)领域中横扫千军,以BERT、GPT为代表的模型屡屡屠榜,目前已经成为了该领域的标准模型。同时,在计算机视觉等领域中,Transformer模型也逐渐得到了重视&a…...
Linux 是否被过誉了?
Linux 是否被过誉了? 有些人眼里,电脑这种东西就应该是华丽丽的桌面,手握鼠标戳戳按钮,键盘只为偶尔打打字,仿佛windows式的桌面形式才是理所应当,GUI才是理所应当,x86才是理所应当,…...
【SpringBoot篇】Spring_Task定时任务框架
文章目录 🌹概述🌺应用场景🎄cron表达式🛸入门案例🎍实际应用 🌹概述 Spring Task 是 Spring 框架提供的一种任务调度和异步处理的解决方案。可以按照约定的时间自动执行某个代码逻辑它可以帮助开发者在 S…...
智能导视电子指路牌是什么?
SVIP-3800系列智能电子指路牌也称智慧指路灯杆,智能指路牌,导航立柱,多功能指示牌,多功能路标,智能指路机器人,智能导视指路牌,问路导航机器人,智能路牌,叁仟智慧路牌、智…...
Android 13.0 无源码app修改它的icon图标
1.概述 在13.0的系统产品rom定制化开发中,有些产品需要对Launcher3中桌面显示的app的icon做替换,如果没有源码的话更换会麻烦点,需要从pms解析app的时候, 可以替换掉app的icon图标就可以了,接下来就来实现相关的功能 2.无源码app修改它的icon图标的相关核心类 framework…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
