C# 指针操作图像 二值化处理
/// <summary>
/// 二值化图像
/// </summary>
/// <param name="bmp"></param>
/// <returns></returns>
private static unsafe Bitmap Binaryzation(Bitmap bmp)
{
BitmapData dstData = bmp.LockBits(new Rectangle(, , bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
byte* data = (byte*)(dstData.Scan0);
//将图像转换为0,1二值得图像;
int step = dstData.Stride; int means = getThreshold(data, bmp.Height * step);
for (int y = ; y < bmp.Height; y++)
{
for (int x = ; x < bmp.Width * ; x += )
{
if (data[y * step + x + ] > means)
data[y * step + x]
= data[y * step + x + ]
= data[y * step + x + ]
= ;
else
data[y * step + x]
= data[y * step + x + ]
= data[y * step + x + ]
= ;
}
}
bmp.UnlockBits(dstData);
return bmp;
} /// <summary>
/// 图像二值化 获取阀值
/// </summary>
/// <param name="inPixels"></param>
/// <param name="length">height * Stride</param>
/// <returns></returns>
private static unsafe int getThreshold(byte* inPixels, int length)
{
int inithreshold = ;
int finalthreshold = ;
List<int> temp = new List<int>();
for (int index = ; index < length; index += )
{
temp.Add(inPixels[index + ]);
}
List<int> sub1 = new List<int>();
List<int> sub2 = new List<int>();
int means1 = , means2 = ;
while (finalthreshold != inithreshold)
{
finalthreshold = inithreshold;
for (int i = ; i < temp.Count(); i++)
{
if (temp[i] <= inithreshold)
{
sub1.Add(temp[i]);
}
else
{
sub2.Add(temp[i]);
}
}
means1 = getMeans(sub1);
means2 = getMeans(sub2);
sub1.Clear();
sub2.Clear();
inithreshold = (means1 + means2) / ;
}
return finalthreshold;
} /// <summary>
/// 图像二值化 获取Means
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
private static int getMeans(List<int> data)
{
int result = ;
int size = data.Count();
foreach (int i in data)
{
result += i;
}
return (result / size);
}
C# 指针操作图像 二值化处理的更多相关文章
- OpenCV_基于局部自适应阈值的图像二值化
在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...
- 致敬学长!J20航模遥控器开源项目计划【开局篇】 | 先做一个开机界面 | MATLAB图像二值化 | Img2Lcd图片取模 | OLED显示图片
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...
- python实现图像二值化
1.什么是图像二值化 彩色图像: 有blue,green,red三个通道,取值范围均为0-255 灰度图:只有一个通道0-255,所以一共有256种颜色 二值图像:只有两种颜色,黑色和白色,二值化就是 ...
- openCV_java 图像二值化
较为常用的图像二值化方法有:1)全局固定阈值:2)局部自适应阈值:3)OTSU等. 局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值.这样做的好处在于每个像素位置处的二值化 ...
- MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)
图像二值化.反运算过程涉及到im2bw,imcomplement函数,反运算可以这么理解:原本黑的区域变为白的区域,白的区域变为黑的区域. 实现过程如下: close all; %关闭当前所有图形窗口 ...
- Python+OpenCV图像处理(十)—— 图像二值化
简介:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程. 一.普通图像二值化 代码如下: import cv2 as cv import numpy ...
- [python-opencv]图像二值化【图像阈值】
图像二值化[图像阈值]简介: 如果灰度图像的像素值大于阈值,则为其分配一个值(可以是白色255),否则为其分配另一个值(可以是黑色0) 图像二值化就是将灰度图像上的像素值设置为0或255,也就是将整个 ...
- Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化
原文:Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化 [函数名称] P分位法图像二值化 [算法说明] 所谓P分位法图像分割,就是在知道图像中目标所占的比率Rat ...
- Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化
原文:Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化 [函数名称] Ostu法图像二值化 WriteableBitmap OstuThSegment(Writ ...
随机推荐
- int型整数中2进制中含有1的个数。
int func(x) { int countx =0; while(x) { countx ++; x = x&(x-1); } return countx; } 解释下思路: 1.任何一个 ...
- C# 读写ini文件
1.添加引用 using System.IO; using System.Runtime.InteropServices; 2.声明API函数 #region API函数声明 [DllImport(& ...
- PowerDesigner16.5 连64位MySQL,出错:SQLSTATE = IM014。原因及解决方案
- 查看Android应用包名package和入口activity名称
使用android自动化测试工具启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法: 方法一:使用aapt //aa ...
- Nginx反向代理到Tomcat服务器
在实际生产中,Tomcat服务器一般不单独使用在项目中,对于静态资源的响应Nginx表现的比较好,另外由于nginx是专门用于反向代理的服务器,所以很容易实现将java的请求转发到后端交给tomcat ...
- FastReport报表控件使用技巧总结
FastReport报表控件使用技巧总结 1.FastReport中如何访问报表中的对象? 可以使用FindObject方法. TfrxMemoView(frxReport1.FindObject(' ...
- selenium WebDriver 操作高德地图
String URL="http://www.amap.com/"; WebDriver driver = new FirefoxDriver(profile); driver.g ...
- GIT简单操作
以下只是简单的bash的操作命令,个人比较喜欢用gui 打开 git bash here git clone https://github.com/自己的名字/trunk git checkout + ...
- IOS- 内存管理机制
iOS平台内存常见问题 作为iOS平台的开发者,是否曾经为内存问题而苦恼过?内存莫名的持续增长,程序莫名的crash,难以发现 的内存泄漏,这些都是iOS平台内存相关的常见问题:本文将会详细介绍iOS ...
- IIS6与IIS7中如何设置文件过期
在IIS6中:一. 打开IIS管理器 二. 选中要设置的网站单击属性,打开站点属性菜单 三. 单击HTTP头选项卡 四. 单击 启用内容过期 如:设置30分钟后过期,此时间段后过期项中填30,单位选择 ...