python+opencv图像处理(十四)

图像直方图
1、灰度图像的直方图
灰度图像的直方图是灰度级和这种灰度级的概率之间关系的图形。
直接看图,下图中左侧是原图,右图为其直方图。

完整代码如下:

import cv2 as cv

import matplotlib.pyplot as plt

def his(img,b):#用matplotlib画图

plt.figure("histogram")

plt.title("histogram of lena")

plt.hist(img.ravel(),bins=b)

plt.show()

imge=cv.imread(r'E:\\image\\lenagray.jpg')

img=cv.cvtColor(imge,cv.COLOR_RGB2GRAY)

cv.imshow('lena',img)

his(img,256)

cv.waitKey(0)

cv.destroyAllWindows()

也可以用opencv自带的函数calcHist()来画直方图,结果如下所示:
我只贴了自定义的函数代码如下:

def his(img,bin):#基于opencv API画

hist = cv.calcHist([img],[0],None,[256],[0,255])

plt.plot(hist,'r')

plt.show()

此段函数的调用过程和上面的代码是一样一样的。
函数calcHist()的使用方法百度一搜一大把

------------------------------代码理解了吗,休息一下吧

------------------------------我是广告开始的分隔线

--------------------------------我是广告结束的分隔线

2、彩色图像的直方图
灰度图像只有一个通道,一般我们画的是灰度图像的直方图。
如果要画彩色图像的直方图,因为彩色图像有三个通道,其实就是将三个通道分别来画直方图并叠加在一起即可。
如下例所示:
其代码如下:

import cv2 as cv

import matplotlib.pyplot as plt

import matplotlib as mpl

mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体

mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号

def image_hist(image):     #画三通道图像的直方图

color = ('b', 'g', 'r')   #这里画笔颜色的值可以为大写或小写或只写首字母或大小写混合

for i , color in enumerate(color):

hist = cv.calcHist([image], [i], None, [256], [0, 256])  #计算直方图

plt.plot(hist, color)

plt.xlim([0, 256])

plt.title("lena的直方图,不同颜色是不同通道")

plt.show()

img=cv.imread(r'E:\\image\\lena.jpg')

cv.imshow('image',img)

image_hist(img)

cv.waitKey(0)

cv.destroyAllWindows()

3、掩膜直方图
图像的掩膜就是用选定的图像、图形或物体,对处理的图像进行遮挡,来控制图像处理的区域或处理过程。
还是先上图:

其完整代码如下:

import cv2 as cv

import numpy as np

import matplotlib.pyplot as plt

import matplotlib as mpl

mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体

mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号

img = cv.imread('E:\\image\\lena.jpg', 0)

# create a mask  应用掩膜

mask = np.zeros(img.shape[:2], np.uint8)#与img大小相同

mask[100:300, 100:400] = 255#部分位置全黑

masked_img = cv.bitwise_and(img, img, mask=mask)#掩膜后的图像,由原图与掩膜相与得到

hist_full = cv.calcHist([img], [0], None, [256], [0,256])#画原图的直方图

hist_mask = cv.calcHist([img], [0], mask, [256], [0,256])#画掩膜的直方图

plt.subplot(221), plt.imshow(img, 'gray'),plt.title("原图")

plt.subplot(222), plt.imshow(mask,'gray'),plt.title("掩膜")

plt.subplot(223), plt.imshow(masked_img, 'gray'),plt.title("掩膜后的图")

plt.subplot(224), plt.plot(hist_full, color='r'), plt.plot(hist_mask, color='b')

plt.title("红色为原图直方图,蓝色为掩膜的直方图")

plt.xlim([0,256])

plt.tight_layout()

plt.show()

(0)

相关推荐

  • 【从零学习OpenCV 4】直方图匹配

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 基于OpenCV的直方图匹配

    重磅干货,第一时间送达 如何为图像生成直方图,如何使直方图相等,最后如何将图像直方图修改为与其他直方图相似. 01. 什么是图像直方图? 在开始定义直方图之前,为简单起见我们先使用灰度图像,稍后再解释 ...

  • 基于OpenCV的图像强度操作

    重磅干货,第一时间送达 01. 什么是图像强度操作 更改任何通道中的像素值 对图像的数学运算 亮度变化 对比度变化 伽玛操纵 直方图均衡 图像预处理中的滤波等增强 使用OpenCV加载图像 impor ...

  • 基于OpenCV的实用图像处理操作

    重磅干货,第一时间送达 图像处理适用于图像和视频.良好的图像处理结果会为后续的进一步处理带来很大的帮助,例如提取到图像中的直线有助于对图像中物体的结构进行分析,良好的特征提取会优化深度学习的结果等.今 ...

  • 使用OpenCV实现图像增强

    重磅干货,第一时间送达 本期将介绍如何通过图像处理从低分辨率/模糊/低对比度的图像中提取有用信息. 下面让我们一起来探究这个过程: 首先我们获取了一个LPG气瓶图像,该图像取自在传送带上运行的仓库.我 ...

  • 【从零学习OpenCV 4】图像直方图绘制

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】直方图均衡化

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【OpenCV 4开发详解】直方图应用

    直方图不仅能够表示图像像素的统计特性,应用统计的直方图结果也可以增强图像的对比度,在图像中寻找相似区域等.本节中将重点介绍如果通过调整直方图分布提高图像的对比度.利用直方图反向投影寻找相同区域以及将图 ...

  • python+opencv图像处理(四十四)

    童年记忆中的爆米花,小时候只在过年的时候才能吃到,现在偶尔能在路边看到有在爆的,看到了总忍不住想买,虽然味道没什么变化,只是再吃不出来以前的幸福了. 长大了......心也大了...... 可是,实力 ...

  • python+opencv图像处理(四十二)

    Kirsch算子 1.Kirsch算子 Kirsch算子是R.Kirsch提出来一种边缘检测新算法,它采用8个模板对图像上的每一个像素点进行卷积求导数,这8个模板代表8个方向,对图像上的8个特定边缘方 ...

  • python+opencv图像处理(四十)

    Sobel算子  开头来张帅哥...... ----------------------这是严谨的分割线-------------------------- 1.Sobel算子(索贝尔算子) Sobe ...

  • python+opencv图像处理(四十三)

    Luplacian算子 1.Luplacian算子 可以用二阶导数可以用来检测边缘,拉普拉斯算子是线性二阶微分算子. 2.Luplacian算子实现 在 OpenCV 中, 可以用函数Laplacia ...

  • python+opencv图像处理(四十一)

    提前过了个万圣节,南瓜灯还蛮好看的,就是那些装鬼的有点吓人...... Scharr算子 1.Scharr算子 Scharr算子也是用于提取图像边缘的. 它是对Sobel算子差异性的增强,两者的原理和 ...

  • Python+opencv 图像处理(四)

    图像的属性 图像是有属性的,常用的通常有三个: shape# 的结构 size# 的大小 dtype# 中元素的类型 图像是由一个一个的像素值组成的,上面的shape用来说明图像是由几行几列几个通道的 ...

  • python+opencv图像处理(三十四)

    梯形低通滤波器 梯形低通滤波器类似上篇巴特沃斯低通滤波,只是其转移函数不同. 梯形低通滤波器的转移函数如下: 式中,D0为截止频率,D1可以任取,但要求D1>D0. 上两个都不能为负. D(u, ...

  • python+opencv图像处理(二十四)

    多图像平均法 对于同一个场景拍摄的多张图像,一般情况下是相同的,但是在实际获取和传输图像的过程往往会发生图像失真,所得到图像和原始图像有某种程度的差别.这些都是因为有外界的噪声加入到图像中,因此在对采 ...

  • python+opencv图像处理(三十九)

    MSR 又一学期开学季,感觉好久没说过话了,多说一会儿这个嗓子有点儿受不了了,老天啊,救救我吧...或许,我应该去学一门说话艺术之类的课? 之前简单写过Retinex理论以及单尺度SSR. 今天要写的 ...