17.3.2.7 二值化(内存处理)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

二值化的算法请参看第17.3.1.5节。17.3.1.5 二值化(黑白)-CSDN博客

【例 17.48二值化算法一。

        //黑白1private void btn2Color1_Click(object sender, EventArgs e){Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);BitmapData sourceData = sourceImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);BitmapData destData = destImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);IntPtr pSource = sourceData.Scan0;int allBytes = sourceData.Stride * sourceData.Height;byte[] rgbvalues = new byte[allBytes];Marshal.Copy(pSource, rgbvalues, 0, allBytes);int pos = 0;int R, G, B;byte avgValue;for (int j = 0; j < sourceData.Height; j++){for (int i = 0; i < sourceData.Width; i++){B = rgbvalues[pos];G = rgbvalues[pos + 1];R = rgbvalues[pos + 2];avgValue = (byte)((B + G + R) / 3);if (avgValue >= 128)avgValue = 255;elseavgValue = 0;rgbvalues[pos] = avgValue; rgbvalues[pos + 1] = avgValue;rgbvalues[pos + 2] = avgValue;pos = pos + 3;}pos = pos + sourceData.Stride - sourceData.Width * 3;}IntPtr pDest = destData.Scan0;Marshal.Copy(rgbvalues, 0, pDest, allBytes);sourceImg.UnlockBits(sourceData);destImg.UnlockBits(destData);picDest.Image = destImg;}

【例 17.49二值化算法二

      //黑白2private void btn2Color2_Click(object sender, EventArgs e){Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);BitmapData sourceData = sourceImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);BitmapData destData = destImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);IntPtr pSource = sourceData.Scan0;int allBytes = sourceData.Stride * sourceData.Height;byte[] rgbvalues = new byte[allBytes];Marshal.Copy(pSource, rgbvalues, 0, allBytes);int pos = 0;int R, G, B;int[] HistGram = new int[256];for (int j = 0; j < sourceData.Height; j++){for (int i = 0; i < sourceData.Width; i++){R = rgbvalues[pos + 2];HistGram[R] += 1;pos = pos + 3;}pos = pos + sourceData.Stride - sourceData.Width * 3;}int threshold;int allSum = 0;int allCount=0;for(int k= 0;k<= 255;k++){allCount += HistGram[k];allSum += k * HistGram[k];}threshold = allSum / allCount;pos = 0;for (int j = 0; j < sourceData.Height; j++){for (int i = 0; i < sourceData.Width; i++){R = rgbvalues[pos + 2];if (R >= threshold)R = 255;elseR = 0;rgbvalues[pos] = (byte)R;rgbvalues[pos + 1] = (byte)R;rgbvalues[pos + 2] = (byte)R;pos = pos + 3;}pos = pos + sourceData.Stride - sourceData.Width * 3;}IntPtr pDest= destData.Scan0;Marshal.Copy(rgbvalues, 0, pDest, allBytes);sourceImg.UnlockBits(sourceData);destImg.UnlockBits(destData);picDest.Image = destImg;}

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看 C# 教程 目录

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

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

相关文章

GEE使用 Sentinel-1 SAR影像 和 Otsu 方法绘制洪水地图

洪水是世界上最常见、破坏性最大的自然灾害之一,造成了巨大的生命和财产损失。此外,随着气候变化的影响,近年来,洪灾变得更加频繁和不可预测。为了最大限度地减少生命和财产损失,必须迅速发现洪水蔓延的情况,并及时采取必要的干预措施。洪水蔓延探测大多使用光学传感器或…

C++参悟:内存管理 shared_ptr

内存管理 shared_ptr 一、概述二、成员函数1. 构造函数2. 析构函数3. 修改器1. reset2. swap 4. 观察器1. get2. use_count3. operator bool 一、概述 std::shared_ptr 是通过指针保持对象共享所有权的智能指针。多个 shared_ptr 对象可占有同一对象。下列情况之一出现时销毁对…

大模型基础架构入门

大模型架构 Prefix Decoder 和 Causal Decoder 和 Encoder-Decoder 区别 在于 attention mask不同&#xff1a; https://zhuanlan.zhihu.com/p/626310493 为何现在的大模型大部分是Decoder only结构&#xff1f; https://www.zhihu.com/question/588325646/answer/335725261…

代码随想录算法训练营第四十四天 | 518. 零钱兑换 II、377. 组合总和 Ⅳ

题目链接&#xff1a;518. 零钱兑换 II 文章讲解&#xff1a;代码随想录 518. 零钱兑换 II讲解 视频讲解&#xff1a;装满背包有多少种方法&#xff1f;组合与排列有讲究&#xff01;| LeetCode&#xff1a;518.零钱兑换II 思路和解法 题目&#xff1a; 给你一个整数数组 c…

JVM-JVM中对象的结构

对象内存布局 对象里的三个区&#xff1a; 对象头&#xff08;Header&#xff09;&#xff1a;Java对象头占8byte。如果是数组则占12byte。因为JVM里数组size需要使用4byte存储。 标记字段MarkWord&#xff1a; 用于存储对象自身的运行时数据&#xff0c;它是synchronized实现轻…

STM32——OLED菜单

文章目录 一.补充二. 二级菜单代码 简介&#xff1a;首先在我的51 I2C里面有OLED详细讲解&#xff0c;本期代码从51OLED基础上移植过来的&#xff0c;可以先看完那篇文章&#xff0c;在看这个&#xff0c;然后按键我是用的定时器扫描不会堵塞程序,可以翻开我的文章有单独的定时…

[2024]常用的conda指令

[2024]常用的conda指令 Hi&#xff0c;各位新年好&#xff0c;今天给大家介绍一下Python项目开发中常用的工具-Anaconda。 Anaconda指的是一个开源的Python发行版本&#xff0c;也是一个安装、管理Python相关包的软件。它自带了Python、Jupyter Notebook、Spyder等工具&#x…

MIPS指令集处理器设计(支持64条汇编指令)

一、题目背景和意义 二、国内外研究现状 (略) 三、MIPS指令集处理器设计与实现 (一).MIPS指令集功能性梳理 1.MIPS指令集架构 (1).mips基础指令集格式总结 MIPS是&#xff08;Microcomputer without interlocked pipeline stages&#xff09;[10]的缩写&#xff0c;含义是…

C++友元->全局函数做友元、类做友元、成员函数做友元

全局函数做友元代码&#xff1a; #include<iostream> using namespace std; #include<string> //建筑物类 class Building { //告诉编译器 goodGay全局函数 是 Building类的好朋友&#xff0c;可以访问类中的私有内容 friend void goodGay(Building * bu…

第14讲投票帖子详情实现

投票帖子详情实现 后端,根据id查询投票帖子信息&#xff1a; /*** 根据id查询* param id* return*/ GetMapping("/{id}") public R findById(PathVariable(value "id")Integer id){Vote vote voteService.getById(id);WxUserInfo wxUserInfo wxUserInf…

电商+支付双系统项目------设计数据库

这篇文章将详细介绍电商支付双系统项目的数据库设计。数据库在该项目中扮演着至关重要的角色&#xff0c;它负责存储和管理用户信息、商品数据、订单记录以及支付交易等关键数据。通过精心设计和优化数据库结构&#xff0c;可以实现高效的数据存储和检索&#xff0c;确保系统的…

JavaScript中的常见算法

一.排序算法 1.冒泡排序 冒泡排序比较所有相邻的两个项&#xff0c;如果第一个比第二个大&#xff0c;则交换它们。元素项向上移动至 正确的顺序&#xff0c;就好像气泡升至表面一样。 function bubbleSort(arr) {const { length } arrfor (let i 0; i < length - 1; i)…

详解自定义类型:枚举与联合体!

目录 ​编辑 一、枚举类型 1.枚举类型的声明 2.枚举类型的优点 3.枚举类型的使用 二、联合体类型(共用体&#xff09; 1.联合体类型的声明 2.联合体的特点 3.相同成员的结构体和联合体的对比 4.联合体大小的计算 5.用联合体判断大小端 三.完结散花 悟已往之不谏&…

【Webpack】自动执行开发服务器 devServer

开发服务器&自动化 每次写完代码都需要手动输入指令才能编译代码&#xff0c;太麻烦了&#xff0c;我们希望一切自动化&#xff0c;即修改代码后服务器浏览器自动刷新。 1. 下载包 npm i webpack-dev-server -D2. 配置 webpack.config.js const path require("p…

深入浅出了解谷歌「Gemini大模型」发展历程

Google在2023年12月官宣了Gemini模型&#xff0c;随后2024年2月9日才宣布Gemini 1.0 Ultra正式对公众服务&#xff0c;并且开始收费。现在2024年2月14日就宣布了Gemini 1.5 Pro&#xff0c;史诗级多模态最强MoE首破100万极限上下文纪录&#xff01;&#xff01;&#xff01;Gem…

Grafana入门:从0开始打造动态仪表板

Grafana入门&#xff1a;从0开始打造动态仪表板 Grafana是一个开源的数据可视化和监控工具&#xff0c;它支持多种数据源&#xff0c;如Prometheus、InfluxDB、Elasticsearch等。通过Grafana&#xff0c;我们可以轻松地创建漂亮的仪表盘&#xff0c;实时监控应用程序和服务的性…

数据分析 — Pandas 数据加载、存储和清洗

目录 一、文件读取1、常见文件读取函数2、read_csv()3、read_table()4、read_excel()5、read_json()6、read_html()7、大文件读取 二、数据保存1、csv2、excel3、json4、html5、MySQL1、连接数据库2、MySQL 存储到本地3、本地存储到 MySQL 三、数据清洗1、处理缺失值1、判断数据…

Aster实现一台电脑当两台使——副屏使用独立win账号

前言&#xff1a;笔者每年回家&#xff0c;都面临着想要和小伙伴一起玩游戏&#xff0c;但小伙伴没有电脑/只有低配电脑的问题。与此同时&#xff0c;笔者自身的电脑是高配置的电脑&#xff0c;因此笔者想到&#xff0c;能否在自己的电脑上运行游戏&#xff0c;在小伙伴的电脑上…

LaTeX中的documentclass命令:指定文档的类型和整体布局

诸神缄默不语-个人CSDN博文目录 documentclass 是 LaTeX 中一个基础且重要的命令&#xff0c;用于定义文档的整体布局和样式。这个命令告诉 LaTeX 编译器文档是属于哪一类的&#xff0c;比如是文章、报告、书籍等&#xff0c;每一类都有其预定义的格式和结构。 文章目录 基本语…

怎么恢复电脑重装前的数据?介绍几种有效的方法

在日常生活和工作中&#xff0c;电脑已成为我们不可或缺的工具。然而&#xff0c;有时候我们会遇到一些突发情况&#xff0c;比如电脑系统崩溃需要重新安装系统。在这个过程中&#xff0c;我们可能会失去一些重要的数据&#xff0c;比如照片、文档、视频等。这些数据可能包含着…