判断图片-判断位图是否是黑白图片的方法
发布时间:2023-06-09 17:20:07
图片象对:经过理处过的jpg格式的位图(头像照片)
算法道理:
通过个每像素点的RGB值来行进判断。我们道知,位图都是由像素点形成的,个每像素点都有一个 RBG值,所以可以通过RGB值来判断图片否是是彩色的。
【RGB】:R代表红,G代表绿,B代表蓝,通过三原色道理来形成丰富多彩的色颜。
开端思绪:
1、纯彩色图片,只有判断像素点的色颜是黑还是白就能够了,一旦碰到非彩色色颜,就能够以为长短彩色图片。
2、灰阶彩色图片,由于有灰阶,所以不是能通过像素点否是是彩色来判断,但是灰阶像素点的RGB有个特色:【R=G=B】
算法优化:
1、纯彩色,只有白黑二色,白色RGB【R=G=B=255】,色黑【R=G=B=0】;
2、灰阶,RGB【R=G=B】;
可以看出无论是彩色还是灰阶都是RGB中【R=G=B】
碰到问题:
有些可以以为是彩色图片,存在偏绿或者偏红的况情,用【R=G=B】法无判断出来。
理处思绪:
虽然这些图片【R<>B<>G】但是色颜大体一致都是近靠灰阶色颜,所以R,G,B的差值该应不是很大,经过我自己测试,发明种这【有偏色的彩色照片】图片中的有所像素点的R,G,B差值绝对最大值不超越50(R-G,R-B,G-B),而彩色图片中的R,B,G差值存在绝对值最大值存在超越 50的像素点。
单简说来就是:
1、【自定义】色偏值 Diff = Max(|R-G|,|R-B|,|G-B|);
2、彩色图片有所图片中最大的 Diff < 50;
【P.S:这个算法可能存在误差,格严意义上说来R=G=B,Diff=0才对。】
详细现实:
/// <summary>
/// 判断图片否是是彩色
/// </summary>
/// <param name="filename">图片文件路径</param>
/// <returns></returns>
public bool isBlackWhite(string filename)
{
Color c = new Color();
using (Bitmap bmp = new Bitmap(filename))
{
//历遍图片的像素点
for (int y = 0; y < bmp.Height; y++)
{
for (int x = 0; x < bmp.Width; x++)
{
c = bmp.GetPixel(x, y);
//判断像素点的色偏差值Diff
if (GetRGBDiff(c.R, c.G, c.B) > 50)
{
return false;
}
}
}
return true;
}
}
public int GetRGBDiff(int r,int g,int b)
{
//略,很单简的,就是取r-g,r-b,g-b绝对值的最大值。
}


猜你喜欢
- 实例引入在家庭影院中,有灯光,屏幕,投影机,功放机,DVD 播放器这几个基本的工具:灯光,可以关闭灯光和打开灯光。投影机,可以打开和关闭投影
- 本文实例为大家分享了Java NIO实战之多人聊天室的具体代码,供大家参考,具体内容如下NIO服务端public class NioServ
- 在开源中国看到的操作ini文件的,写的还不看,留着以后用using System;using System.IO;using System.
- 在一个完整的项目中,如果每一个控制器的方法都返回不同的结果,那么对项目的维护和扩展都会很麻烦;并且现在主流的开发模式时前后端分离的模式,如果
- 大家好,好久不见了,最近由于工作特别繁忙,已经有一个多月的时间没写博客了,我也是深感惭愧。那么今天的这篇既然是阔别了一个多月的文章,当然要带
- 前言记得去年做一个聊天项目需要实现类似QQ的下拉刷新并且有侧滑删除的功能,在网上找了很久都没有QQ的完美,多多少少存在各种的问题,最后把下拉
- 一、项目简述功能:用户的邮箱注册、验证码验证以及用户登录。 不需要注册账号,也可以上传满足条件的临时文件,但是只4小时内有效。 文件的管理,
- 本文实例讲述了C#遍历操作系统下所有驱动器的方法。分享给大家供大家参考。具体分析如下:这里先通过DriveInfo类的GetDrivers方
- # 前言之前在学习C语言的时候,做过一个三子棋的小游戏,最近开始学习Java,就想着能不能用Java再把之前的练习重新实现一边,既然有这个想
- 去年春节的时候支付宝推行的集福娃活动着实火的不能再火了,更给力的是春晚又可以全民参与咻一咻集福娃活动,集齐五福就可平分亿元大红包,只可惜没有
- 需要记录日志的地方包括:进入方法的时候,传参的时候,统计执行时间,方法返回参数的时候,退出语句块的时候,出现异常的时候,等等。先来体验不使用
- 一、简介当我们没有在子类构造函数中写上 base(),默认会先调用父类中无参的构造函数,再调用子类。当在有参构造函数后写上base时,只调用
- 1 @SpringBootApplication自动配置原理@SpringBootApplication是一个组合注解,主要由@Compon
- 引言相信大家在生活中,特别是最近的双十一活动期间,会收到很多短信,而那些短信都有两个特征,第一个是几乎都是垃圾短信,这个特点此处可以忽略不计
- JAVA中Integer类下的常用方法有哪些?1.进制转换 n进制转10进制 字符串结果Integer.parseInt(String s,
- APP启动速度非常重要,APP启动速度慢,可能会造成用户体验不良好,尤其是在最近用Android studio之后,如果长时间不打开app,
- 举例:存在一个类:Public Class Student{ public string name; public int age;}Stu
- 问题一次面试遇到的一个问题,其实也是实际开发中很容易遇到的问题,特此记录一下。当请求某个接口的时候,我们会在请求的header中携带toke
- 模板方法-基类封装Activity和Fragment应该是Android最常用的组件,对他进行简单的封装对提高代码的简洁性也有很大的帮助。B
- 如果需要基于键对所需集合排序,就可以使用SortedList<TKey,TValue>类。这个类按照键给元素排序。这个集合中的值