C# 使用OpenCV基本图像操作功能

news2024/11/14 16:28:30

C# 使用OpenCV

OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。C#在上位机开发中比较常用,有些项目需要在上位机上加入一些机器视觉相关的功能,在下面简单介绍了C#中使用OpenCV库的方法。

安装OpenCV包

在管理NuGet包中,搜索OpenCvSharp4,安装三个包,OpenCV在Net平台的核心包OpencvSharp4,windows平台运行包OpenCvSharp4.runtime.win,扩展包OpenCvSharp4.Extensions

三个包的介绍:

  1. OpencvSharp4 :.NET 的 OpenCV 包装器。 由于此包仅包含核心托管库,因此需要另一个适用于您操作系统的本机绑定包 (OpenCvSharp4.runtime.*)。
  2. OpenCvSharp4.runtime.win:OpenCvSharp 的内部实现包,可在 UWP 以外的 Windows 上运行。
  3. OpenCvSharp4.Extensions :OpenCvSharp GDI+ 扩展库。
    在这里插入图片描述注意:net framework需要4.8才能支持
    在这里插入图片描述

图片操作

图片读入

使用Mat Cv2.ImRead(string fileName, ImreadModes flags = ImreadModes.Color)读入图片

参数:

fileName:图片路径

flags :图片读入模式,默认Color(3 通道 BGR 彩色图像)

返回值:

Mat类型:用于存储和操作图像像素数据

示例:

Mat image = Cv2.ImRead("image.jpg");

图片读入模式

ImreadModes是指定加载图像的颜色和深度的枚举,他可选的类型如下:

    [Flags]
    public enum ImreadModes
    {
        //
        // 摘要:
        //    如果设置,则按原样返回加载的图像(带 alpha 通道,否则会被裁剪)。
        Unchanged = -1,
        //
        // 摘要:
        //   如果设置,总是将图像转换为单通道灰度图像。
        Grayscale = 0x0,
        //
        // 摘要:
        //     如果设置,总是将图像转换为 3 通道 BGR 彩色图像。
        Color = 0x1,
        //
        // 摘要:
        //   如果设置,当输入具有相应的深度时返回16位/32位图像,否则将其转换为8位。
        AnyDepth = 0x2,
        //
        // 摘要:
        //     如果设置,图像将以任何可能的颜色格式读取。
        AnyColor = 0x4,
        //
        // 摘要:
        //     如果设置,则使用 gdal 驱动程序加载图像。
        LoadGdal = 0x8,
        //
        // 摘要:
        //     如果设置,总是将图像转换为单通道灰度图像,图像尺寸缩小 1/2。
        ReducedGrayscale2 = 0x10,
        //
        // 摘要:
        //     如果设置,总是将图像转换为 3 通道 BGR 彩色图像并且图像尺寸减小 1/2。
        ReducedColor2 = 0x11,
        //
        // 摘要:
        //     如果设置,总是将图像转换为单通道灰度图像,图像尺寸缩小 1/4。
        ReducedGrayscale4 = 0x20,
        //
        // 摘要:
        //     如果设置,总是将图像转换为 3 通道 BGR 彩色图像并且图像尺寸缩小 1/4。
        ReducedColor4 = 0x21,
        //
        // 摘要:
        //       如果设置,总是将图像转换为单通道灰度图像,图像尺寸缩小 1/8。
        ReducedGrayscale8 = 0x40,
        //
        // 摘要:
        //    如果设置,总是将图像转换为 3 通道 BGR 彩色图像并且图像尺寸减小 1/8。
        ReducedColor8 = 0x41,
        //
        // 摘要:
        //     如果设置,则不根据 EXIF 的方向标志旋转图像。
        IgnoreOrientation = 0x80
    }

图像显示

  1. 在新的窗口中显示图像

使用Cv2.ImShow(string winName, Mat mat)打开一个窗口显示图像

winName:窗体名称

mat:Mat类,存储的图像数据

  1. 关闭图像

Cv2.DestroyWindow(string winName)关闭对应的图像窗口

winName:要关闭的窗体名称

3.关闭所有图像窗口

Cv2.DestroyAllWindows() 关闭所有显示图像的窗口

图像写入

使用Cv2.ImWrite(string fileName, Mat img, int[]? prms = null)进行写入

fileName:文件名

img:写入的文件对象,Mat类型

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

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

相关文章

JVM-0426

对象内存布局 对象的实例化 创建对象的方式: new 最常见的方式变形1:XX的静态方法 Class : 调用froName( )方法变形2:xxxBuilder / xxxFactory的静态方法 Class的newInstance( ):反射的方式,只能调用空参的…

自动控制原理笔记-频率响应法-频率特性的概念

目录 频率响应法: 频率特性的概念: 一、频率特性的定义: 二、频率特性的求法: 三、频率特性的物理意义: 四、频率特性的图形表示方法: 频率响应法: 基本思想:通过开环频率特性的图形对系统进行分析。 主要优点&…

【2023华中杯数学建模】B 题 小学数学应用题相似性度量及难度评估详细建模方案及实现代码

更新时间:2023-5-1 14:00 1 题目 B 题 小学数学应用题相似性度量及难度评估 某 MOOC 在线教育平台希望能够进行个性化教学,实现用户自主学习。在用户学习时,系统从题库中随机抽取若干道与例题同步的随堂测试题,记录、分析学生的学…

java的类加载浅析

类加载 类加载器 类加载器是Java虚拟机(JVM)的一个组成部分,它的主要任务是在运行时动态加载类和资源,以便程序能够使用它们。类加载器从文件系统、网络或其他来源中获取类的字节码,并将其转换为JVM可执行的形式&…

机器学习基础知识之交叉验证

文章目录 交叉验证定义1、随机子抽样验证2、K折交叉验证3、留一法交叉验证4、自助采样验证 交叉验证定义 在使用某一个数据集对模型进行训练时,模型的实际训练情况会受到数据集的直接影响,且其实际训练结果是难以确定的,极有可能出现欠拟合与…

【实验报告】实验四、彩色图像处理

一、实验目的 使用MatLab软件对图像进行彩色处理,熟悉使用MatLab软件进行图像彩 色处理的有关方法,并体会到图像彩色处理技术以及对图像处理的效果。 二、实验原理 (一)一幅RGB图像就是彩色像素的一个M x N x 3数组&#xff0…

视频搬砖项目【一个技术员是如何轻松利用视频搬运项目做到日入2000+】

无门槛人人可做副业项目,视频搬砖收益,实测一天2000! 今天给大家分享一个微信看一看 的项目,操作非常简单,小白也很容易上手,不需要像某音一样去卖货,只要发布作品就能够有收益。 第一个、项目…

vue项目无法运行报错 error:0308010C:digital envelope routines::unsupported

文章目录 问题原因解决方法方法一方法二 问题 运行vue项目,报错 error:0308010C:digital envelope routines::unsupported 原因 网上查了一下,大体原因就是node版本不对,node版本太高 也有说我没有使用 Node JS 的 LTS(长期支…

ROS2交叉编译操作

ROS2移植过程 在移植ROS2之前,先确认需要移植的版本以及其对应的依赖,这些信息可以在 ROS 2 Releases and Target Platforms 中有介绍,可依据自身需要使用的平台,参考该链接进行选择,下面以ROS2 Humble为例进行介绍ROS2移植操作。 ROS Humble依赖如下: 而ROS2的构建依赖…

sed进阶之保留空间和排除命令

shell脚本编程系列 保留空间 模式空间(pattern space)是一块活跃的缓冲区,在sed编辑器执行命令时保存着待检查的文本,但它并不是sed编辑器保存文本的唯一空间。sed编辑器还有另一块称作保留空间(hold space&#xff0…

【深度学习】BERT是什么?怎么玩的?

RNN 也是一种Seq2Seq网络 这种RNN就不能并行运算,且对于长句子会造成损失遗忘或者梯度爆炸 Transfomer Transformer由且仅由self-Attenion和Feed Forward Neural Network组成。一个基于Transformer的可训练的神经网络可以通过堆叠Transformer的形式进行搭建&…

美国大学特别重视的批判性思维,是如何培养出来的?

美国大学非常注重培养学生的批判性思维,爱因斯坦有一句名言:“大学教育的价值,不在于学习很多事实,而在于训练大脑会思考。” 批判性思维有两个典型特征:(1)批判性思维善于对通常被接受的结论提…

SpringMVC学习总结

SpringMVC简介 我们首先要了解MVC是什么 MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为实体类Bean&#xf…

oracle 19创建用户时出现“ORA-65096: invalid common user or role name”的错误

ORACLE 19命令 版本:Version 19.3.0.0.0 一、ORACLE 19创建用户命令 1、切换到oracle用户 [rootoracledb ~]# su - oracle Last login: Tue Jun 1 01:48:10 PDT 2021 on pts/5 2、以dba身份进入sql语句 [oracleoracledb ~]$ sqlplus "/as sysdba" …

2.rabbitMQ之交换机

1.交换机的作用 1.默认交换机会自动指定队列 2.之前一个信息必须被消费1次,现在的是一个消息可以被消费多次(发送到不同队列的前提下,正常情况下一个队列只能消费一次) 3.消息先发给交换机,然后交换机发给多个队列,可以达到多次消费的效果 如图mq3 2.交换机的类型 默认交换机…

【模块系列】DY-SV17F语音播放模块

前言 本文针对官方给的应用手册进行补充和加上个人理解。在官方的资料中已经介绍的很详细了,我就节选部分出来,基本认识模块就行了吧。本来还行自己介绍呢,没想到官方写这么详细了,也不知道介绍啥了,现在单纯的写为个人…

网络安全:钟馗之眼ZOOMEYE搜索引擎使用

网络安全:钟馗之眼ZOOMEYE搜索引擎 地址: 首页 - 网络空间测绘,网络安全,漏洞分析,动态测绘,钟馗之眼,时空测绘,赛博测绘 - ZoomEye("钟馗之眼")网络空间搜索引擎 zoomeye是针对互联网空间的搜索引擎,收录了互联网空间中的设备、…

103-Linux_I/O复用方法之epoll

I/O复用方法之epoll 一.epoll介绍二.epoll相关的函数1.epoll_create2.epoll_ctl3.epoll_wait 三.LT和ET模式1.LT模式2.ET模式 四.epoll实现TCP服务器1.代码(1)服务器端(2)客户端代码 2.运行结果截图 一.epoll介绍 epoll 是 Linux 特有的 I/O 复用函数。它在实现和使用上与 sel…

小程序swiper控件的使用

swiper实现左右滑动,以及tab点击,并且给swiper绑定下拉刷新事件 <view class"swiper-tab"><view class"start swiper-tab-list {{currentTab0 ? on : }}" data-current"0" catchtap"swichNav">私教课</view><vi…

sed进阶之创建sed实用工具

shell脚本编程系列 加倍行间距 sed $!G data2.txt保留空间的默认值是一个空行&#xff0c;通过G命令可以将保留空间内的内容附加到模式空间内容之后&#xff0c;但是最后一行不需要附加&#xff0c;所以通过排除命令!进行排除 对可能含有空行的文件加倍行间距 sed /^$/d;$!G …