C# OpenCvSharp Demo - Mat格式化输出、Mat序列化和反序列化

C# OpenCvSharp Demo - Mat格式化输出、Mat序列化和反序列化

目录

效果

项目 

代码

下载


效果

直接输出:Mat [ 3*2*CV_8UC3, IsContinuous=True, IsSubmatrix=False, Ptr=0x1eb73ef9140, Data=0x1eb73ef91c0 ]格式化输出:默认风格[ 91,   2,  79, 179,  52, 205;236,   8, 181, 239,  26, 248;207, 218,  45, 183, 158, 101]格式化输出:Python风格[[[ 91,   2,  79], [179,  52, 205]],[[236,   8, 181], [239,  26, 248]],[[207, 218,  45], [183, 158, 101]]]格式化输出:CSV风格91,   2,  79, 179,  52, 205
236,   8, 181, 239,  26, 248
207, 218,  45, 183, 158, 101格式化输出:NumPy风格array([[[ 91,   2,  79], [179,  52, 205]],[[236,   8, 181], [239,  26, 248]],[[207, 218,  45], [183, 158, 101]]], dtype='uint8')格式化输出:c风格{ 91,   2,  79, 179,  52, 205,236,   8, 181, 239,  26, 248,207, 218,  45, 183, 158, 101}格式化输出一行:Python风格[[[236,   8, 181], [239,  26, 248]]]格式化输出一列:Python风格[[179,  52, 205],[239,  26, 248],[183, 158, 101]]格式化输出ROI 矩形:Python风格[[[ 91,   2,  79], [179,  52, 205]],[[236,   8, 181], [239,  26, 248]]]格式化输出ROI Range:Python风格[[[ 91,   2,  79], [179,  52, 205]],[[236,   8, 181], [239,  26, 248]]]

项目 

代码

using OpenCvSharp;
using System;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace OpenCvSharp_Demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Mat image;
        StringBuilder sb = new StringBuilder();

        private void Form1_Load(object sender, EventArgs e)
        {
            image = new Mat(3, 2, MatType.CV_8UC3);
            Cv2.Randu(image, Scalar.All(0d), Scalar.All(255d));

            pictureBox1.Image = new Bitmap(image.ToMemoryStream());
        }

        //序列化
        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = "序列化";
            FileStorage fileStorage = new FileStorage("file.txt", FileStorage.Modes.Write);
            fileStorage.Write("src", image);
            fileStorage.Release();

            //读取显示
            textBox1.Text = File.ReadAllText("file.txt");
        }

        //反序列化
        private void button4_Click(object sender, EventArgs e)
        {
            textBox1.Text = "反序列化";
            FileStorage fileStorage = new FileStorage("file.txt", FileStorage.Modes.Read);
            Mat loadImage = fileStorage["src"].ToMat();
            pictureBox2.Image = new Bitmap(loadImage.ToMemoryStream());
            fileStorage.Release();
        }

        //格式化输出
        private void button5_Click(object sender, EventArgs e)
        {
            sb.Clear();

            sb.AppendLine("直接输出:");
            sb.AppendLine(image.ToString());
            sb.AppendLine("");

            sb.AppendLine("格式化输出:默认风格");
            sb.AppendLine(Cv2.Format(image));
            sb.AppendLine("");

            sb.AppendLine("格式化输出:Python风格");
            sb.AppendLine(Cv2.Format(image, FormatType.Python));
            sb.AppendLine("");

            sb.AppendLine("格式化输出:CSV风格");
            sb.AppendLine(Cv2.Format(image, FormatType.CSV));
            sb.AppendLine("");

            sb.AppendLine("格式化输出:NumPy风格");
            sb.AppendLine(Cv2.Format(image, FormatType.NumPy));
            sb.AppendLine("");

            sb.AppendLine("格式化输出:c风格");
            sb.AppendLine(Cv2.Format(image, FormatType.C));
            sb.AppendLine("");

            sb.AppendLine("格式化输出一行:Python风格");
            sb.AppendLine(Cv2.Format(image.Row(1), FormatType.Python));
            sb.AppendLine("");

            sb.AppendLine("格式化输出一列:Python风格");
            sb.AppendLine(Cv2.Format(image.Col(1), FormatType.Python));
            sb.AppendLine("");

            sb.AppendLine("格式化输出ROI 矩形:Python风格");
            sb.AppendLine(Cv2.Format(new Mat(image, new Rect(0, 0, 2, 2)), FormatType.Python));
            sb.AppendLine("");

            sb.AppendLine("格式化输出ROI Range:Python风格");
            sb.AppendLine(Cv2.Format(new Mat(image, new OpenCvSharp.Range(0, 2), new OpenCvSharp.Range(0, 2)), FormatType.Python));
            sb.AppendLine("");

            sb.Replace("\n", "\r\n");

            textBox1.Text = sb.ToString();
        }
    }
}

using OpenCvSharp;
using System;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;namespace OpenCvSharp_Demo
{public partial class Form1 : Form{public Form1(){InitializeComponent();}Mat image;StringBuilder sb = new StringBuilder();private void Form1_Load(object sender, EventArgs e){image = new Mat(3, 2, MatType.CV_8UC3);Cv2.Randu(image, Scalar.All(0d), Scalar.All(255d));pictureBox1.Image = new Bitmap(image.ToMemoryStream());}//序列化private void button2_Click(object sender, EventArgs e){textBox1.Text = "序列化";FileStorage fileStorage = new FileStorage("file.txt", FileStorage.Modes.Write);fileStorage.Write("src", image);fileStorage.Release();//读取显示textBox1.Text = File.ReadAllText("file.txt");}//反序列化private void button4_Click(object sender, EventArgs e){textBox1.Text = "反序列化";FileStorage fileStorage = new FileStorage("file.txt", FileStorage.Modes.Read);Mat loadImage = fileStorage["src"].ToMat();pictureBox2.Image = new Bitmap(loadImage.ToMemoryStream());fileStorage.Release();}//格式化输出private void button5_Click(object sender, EventArgs e){sb.Clear();sb.AppendLine("直接输出:");sb.AppendLine(image.ToString());sb.AppendLine("");sb.AppendLine("格式化输出:默认风格");sb.AppendLine(Cv2.Format(image));sb.AppendLine("");sb.AppendLine("格式化输出:Python风格");sb.AppendLine(Cv2.Format(image, FormatType.Python));sb.AppendLine("");sb.AppendLine("格式化输出:CSV风格");sb.AppendLine(Cv2.Format(image, FormatType.CSV));sb.AppendLine("");sb.AppendLine("格式化输出:NumPy风格");sb.AppendLine(Cv2.Format(image, FormatType.NumPy));sb.AppendLine("");sb.AppendLine("格式化输出:c风格");sb.AppendLine(Cv2.Format(image, FormatType.C));sb.AppendLine("");sb.AppendLine("格式化输出一行:Python风格");sb.AppendLine(Cv2.Format(image.Row(1), FormatType.Python));sb.AppendLine("");sb.AppendLine("格式化输出一列:Python风格");sb.AppendLine(Cv2.Format(image.Col(1), FormatType.Python));sb.AppendLine("");sb.AppendLine("格式化输出ROI 矩形:Python风格");sb.AppendLine(Cv2.Format(new Mat(image, new Rect(0, 0, 2, 2)), FormatType.Python));sb.AppendLine("");sb.AppendLine("格式化输出ROI Range:Python风格");sb.AppendLine(Cv2.Format(new Mat(image, new OpenCvSharp.Range(0, 2), new OpenCvSharp.Range(0, 2)), FormatType.Python));sb.AppendLine("");sb.Replace("\n", "\r\n");textBox1.Text = sb.ToString();}}
}

下载

源码下载

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

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

相关文章

JAVA基础--IO

IO 什么是IO 任何事物提到分类都必须有一个分类的标准,例如人,按照肤色可分为:黄的,白的,黑的;按照性别可分为:男,女,人妖。IO流的常见分类标准是按照*流动方向*和*操作…

AI办公自动化-用kimi批量重命名Word文档

文件夹里面有很多个word文档,标题里面都含有零代码编程,现在想将其替换为AI办公自动化。 在kimichat中输入提示词: 你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下: 打开文件夹&am…

windows使用Docker-Desktop部署lobe-chat

文章目录 window安装docker-desktop下载和启动lobe-chatAI大语言模型的选择lobe-chat设置大模型连接 window安装docker-desktop docker-desktop下载地址 正常安装应用,然后启动应用,注意启动docker引擎 打开右上角的设置,进入Docker Engine设…

十、Redis内存回收策略和机制

1、Redis的内存回收 在Redis中可以设置key的过期时间,以期可以让Redis回收内存,循环使用。在Redis中有4个命令可以设置Key的过期时间。分别为 expire、pexpire、expireat、pexpireat。 1.1、expire expire key ttl:将key的过期时间设置为tt…

打开远程连接的命令是什么?

远程连接是一种能够在不同设备之间建立连接并共享信息的技术。在许多情况下,我们需要通过远程连接来访问其他设备或处理一些远程任务。本文将介绍一些常用的打开远程连接的命令。 使用SSH连接远程设备 SSH(Secure Shell)是一种安全的网络协议…

【IC前端虚拟项目】验证环境env与base_teat思路与编写

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 上一篇里解决了最难搞的axi_ram_model,接下来呢就会简单又常规一些了,比如这一篇要说的env和base_test的搭建。在这里我用了gen_uvm_tb脚本: 【前端验证】验证自动化脚本的最后一块拼图补全——gen_t…

Spring编程使用DDD的小把戏

场景 现在流行充血领域层,在原本只存储对象的java类中,增加一些方法去替代原本写在service层的crud, 但是例如service这种一般都是托管给spring的,我们使用的ORM也都托管给spring,这样方便在service层调用mybatis的m…

【免费Java系列】大家好 ,今天是学习面向对象高级的第十二天点赞收藏关注,持续更新作品 !

这是java进阶课面向对象第一天的课程可以坐传送去学习http://t.csdnimg.cn/Lq3io day10-多线程 一、多线程常用方法 下面我们演示一下getName()、setName(String name)、currentThread()、sleep(long time)这些方法的使用效果。 public class MyThread extends Thread{publi…

力扣例题(用栈实现队列)

目录 链接. - 力扣(LeetCode) 描述 思路 push pop peek empty 代码 链接. - 力扣(LeetCode) 描述 思路 push 例如我们将10个元素放入栈中,假设最左边为栈顶,最右侧为栈底 则为10,9,8,7,6,5,4,3,…

stm32——OLED篇

技术笔记! 一、OLED显示屏介绍(了解) 1. OLED显示屏简介 二、OLED驱动原理(熟悉) 1. 驱动OLED驱动芯片的步骤 2. SSD1306工作时序 三、OLED驱动芯片简介(掌握) 1. 常用SSD1306指令 2. …

清理缓存简单功能实现

在程序开发中,经常会用到缓存,最常用的后端缓存技术有Redis、MongoDB、Memcache等。 而有时候我们希望能够手动清理缓存,点一下按钮就把当前Redis的缓存和前端缓存都清空。 功能非常简单,创建一个控制器类CacheController&#xf…

Docker搭建ctfd平台

安装docker和docker-compose (1)安装docker: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun(2)安装 Docker Compose: yum install docker-compose安装失败参考下面文章 https:/…