数字图像个人学习笔记:简单二值化,纯粹个人理解,代码或者论述如有错误请帮我指出!!!

图像的深度如果是8bit,也就是能存储0-255种不同数值,这就是常见的jpg格式的位数,也就是灰度级别。0表示黑色,255表示白色,值越大图片越亮。

图像有RGB三个通道,RGB三个通道的取值都在0-255之间,根据色彩原理可以显示出各种颜色。

下面就是一张常见的三通道图片:

图1:宇智波鼬

毫无疑问,帅!!!!!!

言归正传,二值化算法就是设定一个“阈值”!假设图片的长宽分别是256和128(灰度图),那么这个图片一共就是256x128=32768个像素点。现在,对每个像素点进行判别,如果这个像素点的值大于“阈值”,就把这个像素值重新赋值为255,也就是白色;如果这个像素点的值小于“阈值”,那么就把这个像素点赋值为0,也就是黑色。

生命苦短,show me code!

import imageio
import numpy as np
import matplotlib.pyplot as plt
idaqi = imageio.imread("idaqi_jieyin.jpg")
def rgb2gray(rgb):"""rgb 2 grayArgs:rgb imageReturns:gray image"""gray = rgb[:, :, 0] * 0.299 + rgb[:, :, 1] * 0.587 + rgb[:, :, 2] * 0.114return gray
def thre_bin(image, threshold=170):  """binary image"""threshold_image = np.zeros(shape=(image.shape[0], image.shape[1]), dtype=np.uint8)gray = rgb2gray(image)# loop for every pixelfor i in range(gray.shape[0]):for j in range(gray.shape[1]):if gray[i][j] > threshold:threshold_image[i][j] = 255else:threshold_image[i][j] = 0return threshold_image, graybin_image, gray = thre_bin(idaqi)
plt.figure()
plt.subplot(1, 2, 1)
plt.imshow(gray/255, cmap="gray")
plt.subplot(1, 2, 2)
plt.imshow(bin_image/255, cmap="gray")
plt.show()

上面包含了两个函数,一个是rgb2gray()用来将彩色图像转为灰度图像,一个是thre_bin(),也就是二值化函数。二值化函数的核心就是双层循环,对每个像素点进行判断并重新赋值,得到了下面的图:

图2:二值化前后对比

这里threshold也就是阈值的选择是170,这样皮肤这种比较亮的地方就被赋值为255,比较暗的背景和衣服就被赋值为0。换一个threshold=200试一下:

图3:阈值为200对比

所以,这个算法的参数就是阈值的选择。这仅仅是最简单的二值化算法,后续会补充其它二值化方法。

二值化_二值化算法之宇智波鼬相关推荐

  1. 建立二维数组_二维数组的 DP

    寻找不同路径和 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标 ...

  2. c++ 二维数组_二维数组的声明2019_04_18

    -------------[感谢小郡提供的图片] [广告位招租] ---------------------------------------------------------------- -- ...

  3. 生成有时间限制的二维码_二维码竟有被用完的一天!看到截止日期后,网友:虚惊一场...

    生活在现如今这样一个智能化的时代中,二维码已经逐渐成为了人们日常生活中必不可少的存在.出门骑共享单车要扫码.购物买东西要出示微信.支付宝付款码.聊天加好友同样也是要用到二维码,可以说现在的生活中已经无 ...

  4. python定义二维数组_二维数组的定义、初始化和输出,C语言二维数组详解

    本节学习二维数组.二维数组与一维数组相似,但是用法上要比一维数组复杂一点.后面的编程中,二维数组用得很少,因为二维数组的本质就是一维数组,只不过形式上是二维的.能用二维数组解决的问题用一维数组也能解决 ...

  5. java 二叉堆_二叉堆(三)之 Java的实现

    概要 前面分别通过C和C++实现了二叉堆,本章给出二叉堆的Java版本.还是那句话,它们的原理一样,择其一了解即可. 二叉堆的介绍 二叉堆是完全二元树或者是近似完全二元树,按照数据的排列方式可以分为两 ...

  6. python初始化一个二维数组_二维数组初始化

    对于一个M行N列的二维数组,可以看成是M行一维数组,一维数组是N列.例如 int array[3][2]; 是一个3行2列的二维数组,其实,如同3个一维数组,一维数组是2列.那么,对3行2列的二维数组 ...

  7. mysql怎样存储二维数组_二维数组存储

    windows栈结构:向低地址处增长 如上图,首先定义一个二维数组 M[2][3] = {1,2,3,4,5,6},其首地址M[0][0]为:0x0012FE44,其元素依次向低地址方向存储.内存中存 ...

  8. golang函数调用机制:多返回值,_返回值忽略

    通俗易懂的方式的理解 函数-调用过程 介绍:为了让大家更好的理解函数调用过程, 看两个案例,并画出示意图,这个很重要. 传入一个数+1 对上图说明 : (1) 在调用一个函数时,会给该函数分配一个新的 ...

  9. c.kdocs cn二维码_二维码防窜货解决方案,物流动向尽在掌握

    http://ccn.yesno.com.cn/zsfch/一物一码防窜货管理系统 二维码防窜货解决方案,处理各种窜货,阻止多地经销商窜货.窜货的情况经常发生,企业做不到各地的分销商都能全部管理.分销 ...

  10. build vue 静态化_页面静态化

    页面静态化和静态缓存 静态缓存:还需要请求php一些简单的判断,只是一些复杂的逻辑结构不需要再进行php处理.如在缓存数据库中的数据,这样就不用每次都请求数据库.典型的例子就是smarty中有页面静态 ...

最新文章

  1. 【NCEPU】徐韬:街景字符编码识别比赛
  2. JavaScript(八)
  3. 网络数据包信息收集工具ferret-sidejack
  4. Istio:一个用于微服务间通信的服务网格开源项目
  5. 汉恩互联「绘动画室」,触摸背景墙
  6. javascript中的异常处理
  7. 快逸报表参数查询前报表不显示
  8. Mac安装mysql8.x最简洁的步骤,避免采坑
  9. 音视频开发(39)---语音增强
  10. airtest测试用例_Airtest 常用方法
  11. Spring MVC起步(一)
  12. win7 时间服务器地址修改,win7 时间服务器地址修改
  13. 英文版 office 中的中文字体
  14. canvas绘图树状图
  15. Java设计模式及实践
  16. Java为图片加水印
  17. 零售航母沃尔玛公布业绩:喜忧参半
  18. 计算机程序设计知识点总结,软考程序员知识点总结(一)
  19. 万分之二用百分之怎么表示_万分之一符号怎么写
  20. Spring的IOC原理以及思维导图

热门文章

  1. 图的应用之--图的连通
  2. nodejs之路-[0]安装及简易配置
  3. Tech Insight携阿里云Link物联网平台助力实现“IoT全栈开发”
  4. 深入理解 GraphQL
  5. Python::OS 模块简介
  6. 【Nginx】Nginx学习笔记01_linux/centos下安装Nginx
  7. Redis开源文档《Redis设计与实现》
  8. CentOS 6.3最小化安装后,有些必备工作才可以正常使用
  9. 玩转Android---组件篇---Broadcast Receiver(广播接收器)
  10. 将大文件分割为指定大小的文件