全局线性变换的公式是s = (r-a)*(d-c)/(b-a)+c,其中a、b是原图片的灰度最小值和最大值,c、d是变换后的灰度值的最小值和最大值。r是当前像素点的灰度值,s是当前像素点变换后的灰度值。该公式可自己画出一个坐标,利用相似三角形性质可轻易得出。所以只要我们得到一个图片的灰度范围,我们就可以自由变换到指定的灰度范围,这种灰度变换也是图像增强的一部分。下面的示例能清晰看出变换后的效果。除了图片的直观显示,我们还可以画出其变换前后的直方图来看出其差异。

代码如下:

import cv2
import matplotlib.pyplot as plt
# 统计各灰度值的像素个数
def histogram(image):
(row, col) = image.shape
hist = [0]*256
for i in range(row):
for j in range(col):
hist[image[i,j]] +=1
return hist #全局灰度线性变换
def global_linear_transmation(img): #将灰度范围设为0~255
maxV=img.max()
minV=img.min()
for i in range(img.shape[0]):
for j in range(img.shape[1]):
img[i,j] = ((img[i,j]-minV)*255)/(maxV-minV)
return img image0 = cv2.imread("rice.tif",0)
plt.figure()
plt.subplot(2,2,1)
#使用matplotlib中的imshow显示图像,注意参数的含义,不加参数试试
plt.imshow(image0,vmin=0, vmax=255,cmap = plt.cm.gray)
plt.title('original image')
image_hist0 = histogram(image0)
plt.subplot(2,2,2)
plt.plot(image_hist0) image1=global_linear_transmation(image0)
plt.subplot(2,2,3)
plt.imshow(image1,vmin=0, vmax=255,cmap = plt.cm.gray)
image_hist1 = histogram(image1)#统计变换后图像的各灰度值像素的个数
plt.subplot(2,2,4)
plt.plot(image_hist1)
plt.show()

效果图如下:

python全局灰度线性变换——自由设定图像灰度范围的更多相关文章

  1. OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...

  2. Python图像处理丨基于OpenCV和像素处理的图像灰度化处理

    摘要:本篇文章讲解图像灰度化处理的知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,使用像素处理方法对图像进行灰度化处理. 本文分享自华为云社区<[Python图像处理 ...

  3. 深入学习OpenCV中图像灰度化原理,图像相似度的算法

    最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...

  4. c#图像灰度化、灰度反转、二值化

    图像灰度化:将彩色图像转化成为灰度图像的过程成为图像的灰度化处理.彩色图像中的每个像素的颜色有R.G.B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*25 ...

  5. Win8MetroC#数字图像处理--2.1图像灰度化

    原文:Win8MetroC#数字图像处理--2.1图像灰度化   [函数说明] 图像灰度化函数GrayProcess(WriteableBitmap src) [算法说明]   图像灰度化就是去掉彩色 ...

  6. matlab图像灰度调整——imadjust函数的使用

    在MATLAB中,通过函数imadjust()进行图像灰度的调整,该函数调用格式如下: J=imadjust( I )  对图像I进行灰度调整 J=imadjust( I,[low_in;high_i ...

  7. 跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算

    摘要:本篇文章结合灰度三维图像讲解图像顶帽运算和图像黑猫运算,通过Python调用OpenCV函数实现. 本文分享自华为云社区<[Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽 ...

  8. Java图像灰度化的实现过程解析

    概要 本文主要介绍了灰度化的几种方法,以及如何使用Java实现灰度化.同时分析了网上一种常见却并不妥当的Java灰度化实现,以及证明了opencv的灰度化是使用“加权灰度化”法 24位彩色图与8位灰度 ...

  9. java实现图像灰度化

    /*在研究Java实现将一张图片转成字符画的时候,发现将图像转化字符串是根据照片的灰度采用不同的字符画出来,形成一个灰度表.于是就研究了下关于灰度值这个东西,于是跳了一个大坑...因为鄙人用的ubun ...

随机推荐

  1. POJ 2586:Y2K Accounting Bug

    Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11297   Accepted: 56 ...

  2. Shiro密码处理

    散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如 MD5.SHA等.一般进行散列时最好提供一个 salt(盐),比如加密密码"admin& ...

  3. 文献阅读 - MonoLoco与关于Camera Matrix的笔记

    目录 概览 HighLights Camera Intrinsic Matrix 笔记 Intrinsic Matrix Task-Error - 不确定性任务下确界的计算 输出假设的Laplace分 ...

  4. centos7+nginx+php+mysql环境搭建

    一:CentOS7安装 在VMware 新建一个虚拟机CentOS 64位,配置好磁盘大小为30G,内存2G,启动虚拟机进入CentOS安装界面 选择Install CentOS 7 SOFTWARE ...

  5. docker搭建redis主从集群和sentinel哨兵集群,springboot客户端连接

    花了两天搭建redis主从集群和sentinel哨兵集群,讲一下springboot客户端连接测试情况 redis主从集群 从网上查看说是有两种方式:一种是指定配置文件,一种是不指定配置文件 引用地址 ...

  6. Unity 协程运行时的监控和优化

    我是快乐的搬运工: http://gulu-dev.com/post/perf_assist/2016-12-20-unity-coroutine-optimizing#toc_0 --------- ...

  7. ACwing算法基础课听课笔记(第一章,基础算法二)(差分)

    前缀和以及二维前缀和在这里就不写了. 差分:是前缀和的逆运算 ACWING二维差分矩阵    每一个二维数组上的元素都可以用(x,y)表示,对于某一元素(x0,y0),其前缀和就是以该点作为右下角以整 ...

  8. 寒假day20

    今天解决了部分信息爬取不下来的问题

  9. js数组,字符转换;key_value获取

    js 数组转字符串js 字符串转数组arr.join(",");String.split(","); 对象的所有keys Object.keys(val)对象的 ...

  10. Java8集合框架——HashMap源码分析

    java.util.HashMap 本文目录: 一.HashMap 的特点概述和说明 二.HashMap 的内部实现:从内部属性和构造函数说起 三.HashMap 的 put 操作 四.HashMap ...