Python灰度变换中灰度切割分析实现
作者:Henry_zs 发布时间:2021-10-05 12:07:49
标签:Python,灰度切割,灰度变换
1. 介绍
灰度切割:增强特定范围的对比度,突出图像 * 定范围的亮度(灰度级分层也叫灰度切割)
实现灰度切割的方法有很多种,但基本的方法就两种,其余的方法都是这两个方法的变体
将感兴趣范围内的灰度值全部映射成为一个值(如白色),将其余的灰度值显示为另一个颜色(如黑色),产生一个二值图像
将感兴趣的灰度值变亮,保持其余的灰度值不变
对应的映射函数为:
灰度切割的特殊使用:阈值处理
将感兴趣的物体从背景中分离出来,也叫二值化处理,是第一种方法的变体
2. 灰度切割代码实现
这次没有采用for循环的方式去遍历每个像素点
x[:,:] > a 代表x所有行所有列中大于a的点的位置会为True,再将结果传入自身的坐标中就能找到满足两个阈值中间的点,将这些点替换为255即可
import cv2
import numpy as np
def transform1(x):
a , b = 150 , 240 # 定义两个阈值,中间部分变换为255
dst = x.copy()
dst[(x[:,:] >= a) & (x[:,:] <= b)] = 255 # 中间变换为255
dst[(x[:,:] < a) | (x[:,:] > b)] = 0 # 其余的变换为0
return dst
def transform2(x):
a , b = 150 , 240 # 定义两个阈值,中间部分变换为255
dst = x.copy()
dst[(x[:,:] >= a) & (x[:,:] <= b)] = 255 # 中间变换255,其余的不变
return dst
gray = cv2.imread('./img.png',0)
dst1 = transform1(gray)
dst2 = transform2(gray)
cv2.imshow('img',np.hstack((gray,dst1,dst2)))
cv2.waitKey()
cv2.destroyAllWindows()
输出结果
3. 阈值处理
灰度切割的特殊使用是阈值处理,opencv中包含了threshold函数对图像进行阈值处理
语法如下:retval,dst = cv2.threshold(src , thresh , maxval , type)
ret val(return value):处理时采用的阈值大小
dst :处理后的图像
src : 处理前的图像
maxval(max val):产生二值图像后,阈值处理后输出的值,另一个默认是0。例如小于150的输出0,其余的就是这个maxval(一般是255)
type : 阈值处理的类型,有如下的几种类型
type | 含义 |
cv2.THRESH_BINARY | 二值化阈值处理:超出thresh,为255;否则为0 |
cv2.THRESH_BINARY_INV | 反二值化阈值处理:超出thresh,为0;否则为255 |
cv2.THRESH_TOZERO | 低于阈值零处理:低于thresh,为0;否则灰度值不变 |
cv2.THRESH_TOZERO_INV | 超出阈值零处理:低于thresh,为255;否则为0 |
cv2.THRESH_TRUNC(truncate截断) | 截断阈值处理:超过thresh,为thresh;否则不变 |
代码:
import cv2
import numpy as np
a = np.arange(0,256).reshape(1,-1).astype(np.uint8) # 0-255
img = cv2.resize(a,(800,100),interpolation=cv2.INTER_AREA) # 创建渐变图像
ret1,img1 = cv2.threshold(img,200,255,cv2.THRESH_BINARY) # 二值化阈值处理
ret2,img2 = cv2.threshold(img,200,255,cv2.THRESH_BINARY_INV) # 反二值化阈值处理
ret3,img3 = cv2.threshold(img,200,255,cv2.THRESH_TOZERO) # 低于阈值零处理
ret4,img4 = cv2.threshold(img,200,255,cv2.THRESH_TOZERO_INV) # 超出阈值零处理
ret5,img5 = cv2.threshold(img,200,255,cv2.THRESH_TRUNC) # 截断阈值处理
cv2.imshow('img',np.vstack((img,img1,img2,img3,img4,img5)))
cv2.waitKey()
cv2.destroyAllWindows()
处理结果:
来源:https://blog.csdn.net/qq_44886601/article/details/127377121


猜你喜欢
- 前言使用python做一个加密资料的软件,可加密应用程序、文件、压缩包等多种文件格式,不可直接加密文件夹,可以先用压缩包打包在加密。加密后的
- 本文实例为大家分享了asp.net存储和读取数据库图片的具体代码,供大家参考,具体内容如下1. 创建asp.net web窗体项目代码如下:
- 1 数据离散化1.1 为什么要离散化连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作
- 语法:Void header(string $string[,bool $replace=true [, int $http_respons
- 何为质数: 只能被1 和 自身 整除的数;方法: 利用js中求模, 看是否有余数. ---> 3%2 = 1; 5%2 = 3....
- 绘制图形利用opencv提供的绘制图形api可以轻松在图像上绘制各种图形,比如直线,矩形,圆,椭圆等图形。line(img,pt
- 基于pygame的飞机大作战小游戏,适合新手,不能直接运行,只能在命令行进入当前游戏目录,输入python game.py才能够运行,尚不知
- Vue中有两个较为高级的静态方法mixin和extend,接下来我们来讨论下关于他们各自的原理和使用场景。Mixin:原理:先来看看官网的介
- 在使用SQL Server 的过程,中由于经常需要从多个不同地点将数据集中起来或向多个地点复制数据,所以数据的导出,导入是极为常见的操作.我
- 写在前面:在上一篇文章中介绍了栈这个数据结构,这篇文章介绍一下队列。什么是队列?队列是一种先进先出的数据结构,队列中允许两种基础操作,也就是
- 本文实例讲述了JS仿Windows开机启动Loading进度条的方法。分享给大家供大家参考。具体实现方法如下:<html><
- 0. 引言有如上一张图片,在以往的图像旋转处理中,往往得到如图所示的图片。然而,在进行一些其他图像处理或者图像展示时,黑边带来了一些不便。本
- 下载opencv2.4.9(python2.7匹配)后 (1)运行OpenCV 2.4.9.exe;(2)配置Python:将\opencv
- 前言题目: Survey of Personalization Techniques for FederatedLearning会议: 20
- 学了这么长时间的Pygame,一直想写个游戏实战一下。看起来很简单的游戏,写其来怎么这么难。最初想写个俄罗斯方块,想了很长时间如何实现,想来
- 区别:series,只是一个一维数据结构,它由index和value组成。dataframe,是一个二维结构,除了拥有index和value
- 如何做一个树状展开视图来显示自己的记录结构?在SQL中,如何做一个可收起和展开树状结构图?就是资源管理器左栏的那种效果。这要用到Data s
- 前面的话发布一个版本时,我们通常先在版本库中打一个标签(tag)。这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就
- 本文实例讲述了Python中列表元素转为数字的方法。分享给大家供大家参考,具体如下:有一个数字字符的列表:numbers = ['1
- 一、Scipy 入门1.1、Scipy 简介及安装官网:http://www.scipy.org/SciPy安装:在C:\Python27\