1. cv2.calc([img], [0], mask, [256], [0, 256])  # 用于生成图像的频数直方图

参数说明: [img]表示输入的图片, [0]表示第几个通道, mask表示掩码,通常生成一部分白色,一部分黑色的掩码图, [256]表示直方图的个数, [0, 256]表示数字的范围

图像直方图表示的是颜色的像素值,在单个或者一个范围内出现的频数,一般图像会在某一个颜色区间内呈现较高的值

一只小猫,即其(0-255)的像素点的直方图分布情况,我们可以看出其在100-200之间的像素分布较密集

代码:

1. 灰度图的颜色通道

第一步:读取图片

第二步:使用cv2.calhist([img], [0], None, [256], [0, 256]) 获得每个像素点的频数值

第三步:使用plt.hist(img.ravel(), 256)做出直方图

import cv2
import numpy as np
import matplotlib.pyplot as plt def cv_show(img, name):
cv2.imshow(name, img)
cv2.waitKey(0)
cv2.destroyAllWindows() # 第一步读入图片
img = cv2.imread('cat.jpg', 0) # 第二步:使用calchist计算每个像素点的频数
hist = cv2.calcHist([img], [0], None, [256], [1, 256]) # 第三步:进行画图操作
plt.subplot(131)
plt.imshow(img, cmap='gray')
plt.subplot(132)
plt.hist(img.ravel(), 256)
plt.subplot(133)
plt.plot(hist, color='red')
plt.show()

2.研究不同通道的颜色频度

# 研究不同颜色像素分布情况
img = cv2.imread('cat.jpg') color = ['b', 'g', 'r']
for i, col in enumerate(color):
histr = cv2.calcHist([img], [i], None, [256], [1, 256])
plt.plot(histr, color=col, label=col)
plt.legend()
plt.show()

3.使用掩码mask删选出部分图像,做像素频度分析

第一步:读入图片

第二步:使用np.zeros生成掩码mask

第三步:使用cv2.bitwise将掩码与图像结合截取中间位置的图片

第四步:使用cv2.calcHist生成统计像素点的频数图

第五步:进行绘图操作

# 第一步读入图片
img = cv2.imread('cat.jpg', 0) # 第二步:生成掩码,中间部分为255,边缘部分都为0
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:300, 100:400] = 255 # 第三步:使用cv2.bitwise与操作,只保留图像的中间部分
ret = cv2.bitwise_and(img, img, mask=mask) # 做与操作 # 第四步:使用cv2.calcHist带入掩码生成频数曲线
m_hist = cv2.calcHist([img], [0], mask, [256], [1, 256]) # 第五步:进行最终的绘图操作
plt.subplot(221)
plt.imshow(img, 'gray')
plt.subplot(222)
plt.imshow(mask, 'gray')
plt.subplot(223)
plt.imshow(ret, 'gray')
plt.subplot(224)
plt.plot(m_hist)
plt.plot(hist)
plt.show()

机器学习进阶-直方图与傅里叶变换-图像直方图 1.cv2.calc(生成图像的像素频数分布(直方图))的更多相关文章

  1. 机器学习进阶-项目实战-信用卡数字识别 1.cv2.findContour(找出轮廓) 2.cv2.boudingRect(轮廓外接矩阵位置) 3.cv2.threshold(图片二值化操作) 4.cv2.MORPH_TOPHAT(礼帽运算突出线条) 5.cv2.MORPH_CLOSE(闭运算图片内部膨胀) 6. cv2.resize(改变图像大小) 7.cv2.putText(在图片上放上文本)

    7. cv2.putText(img, text, loc, text_font, font_scale, color, linestick) # 参数说明:img表示输入图片,text表示需要填写的 ...

  2. 机器学习进阶-目标追踪-SSD多进程执行 1.cv2.dnn.readnetFromCaffe(用于读取已经训练好的caffe模型) 2.delib.correlation_tracker(生成追踪器) 5.cv2.writer(将图片写入视频中) 6.cv2.dnn.blobFromImage(图片归一化) 10.multiprocessing.process(生成进程)

    1. cv2.dnn.readNetFromCaffe(prototxt, model)  用于进行SSD网络的caffe框架的加载 参数说明:prototxt表示caffe网络的结构文本,model ...

  3. 机器学习进阶-直方图与傅里叶变换-傅里叶变换(高低通滤波) 1.cv2.dft(进行傅里叶变化) 2.np.fft.fftshift(将低频移动到图像的中心) 3.cv2.magnitude(计算矩阵的加和平方根) 4.np.fft.ifftshift(将低频和高频移动到原来位置) 5.cv2.idft(傅里叶逆变换)

    1. cv2.dft(img, cv2.DFT_COMPLEX_OUTPUT) 进行傅里叶变化 参数说明: img表示输入的图片, cv2.DFT_COMPLEX_OUTPUT表示进行傅里叶变化的方法 ...

  4. 机器学习进阶-直方图与傅里叶变化-直方图均衡化 1.cv2.equalizeHist(进行直方图均衡化) 2. cv2.createCLAHA(用于生成自适应均衡化图像)

    1. cv2.equalizeHist(img)  # 表示进行直方图均衡化 参数说明:img表示输入的图片 2.cv2.createCLAHA(clipLimit=8.0, titleGridSiz ...

  5. 3. OpenCV-Python——图像梯度算法、边缘检测、图像金字塔与轮廓检测、直方图与傅里叶变换

    一.图像梯度算法 1.图像梯度-Sobel算子 dst = cv2.Sobel(src, ddepth, dx, dy, ksize) ddepth:图像的深度 dx和dy分别表示水平和竖直方向 ks ...

  6. OpenCV笔记(4)(直方图、傅里叶变换、高低通滤波)

    一.直方图 用于统计图片中各像素值: # 画一个图像各通道的直方图 def draw_hist(img): color = ('b', 'g', 'r') for i, col in enumerat ...

  7. 机器学习进阶-目标跟踪-KCF目标跟踪方法 1.cv2.multiTracker_create(构造选框集合) 2. cv2.TrackerKCF_create(获得KCF追踪器) 3. cv2.resize(变化图像大小) 4.cv2.selectROI(在图像上框出选框)

    1. tracker = cv2.multiTracker_create() 获得追踪的初始化结果 2.cv2.TrackerKCF_create() 获得KCF追踪器 3.cv2.resize(fr ...

  8. 机器学习进阶-案例实战-答题卡识别判 1.cv2.getPerspectiveTransform(获得投射变化后的H矩阵) 2.cv2.warpPerspective(H获得变化后的图像) 3.cv2.approxPolyDP(近似轮廓) 4.cv2.threshold(二值变化) 7.cv2.countNonezeros(非零像素点个数)6.cv2.bitwise_and(与判断)

    1.H = cv2.getPerspectiveTransform(rect, transform_axes) 获得投射变化后的H矩阵 参数说明:rect表示原始的位置左上,右上,右下,左下, tra ...

  9. 机器学习进阶-案例实战-图像全景拼接-图像全景拼接(RANSCA) 1.sift.detectAndComputer(获得sift图像关键点) 2.cv2.findHomography(计算单应性矩阵H) 3.cv2.warpPerspective(获得单应性变化后的图像) 4.cv2.line(对关键点位置进行连线画图)

    1. sift.detectAndComputer(gray, None)  # 计算出图像的关键点和sift特征向量 参数说明:gray表示输入的图片 2.cv2.findHomography(kp ...

随机推荐

  1. Dubbo(4)消费Dubbo服务

    消费就是一个远程调用服务的过程: 1.项目结构:     2.项目依赖pom.xml: <project xmlns="http://maven.apache.org/POM/4.0. ...

  2. 关于requests的session方法保持不了cookie的问题。(seesion的意思是保持一个会话,比如 登陆后继续操作(记录身份信息) 而requests是单次请求的请求,身份信息不会被记录)

    最近在做爬虫的时候遇到了一个问题,在用requests的session方法保持cookie的时候发现requests不能保持手动构建的cookie.起初以为requests只能自动保持由服务器返回的s ...

  3. 【转】XP_cmdshell存储过程

    原文地址:http://www.cnblogs.com/love_study/archive/2010/03/02/1676583.html 一 .简介 xp_cmdshell 扩展存储过程将命令字符 ...

  4. redis-5.0.3集群搭建

    首先部署redis-5.0.3,请参考我的另一篇文章 https://www.cnblogs.com/djlsunshine/p/10592174.html 启动redis服务 # redis-ser ...

  5. intent--Activity之间数据传递之Intent数据传递

    intent传值: 4,intent传集合 3,intent传对象, 2,传递后有返回值的情况:当需要从目标Activity回传数据到原Activity时,可以使用上述方法定义一个新的Intent来传 ...

  6. [UE4]修改枪支碰撞体

    一.Simple Collision:显示简单碰撞体,Comlex Collision:显示复杂碰撞体 二.添加简单和复杂碰撞体 三.自动生成复杂精确的碰撞体

  7. Android之socket多线程

    一.添加权限 <uses-permission android:name="android.permission.INTERNET" /> 二.输入输出流 客户端和服务 ...

  8. 机器学习简要笔记(三)-KNN算法

    #coding:utf-8 import numpy as np import operator def classify(intX,dataSet,labels,k): ''' KNN算法 ''' ...

  9. tomcat简单使用(一)

    先来说一说tomcat的使用 官网下载tomcat:tomcat,我的百度云上的:tomcat Tomcat分为安装版和解压版:安装版:一台电脑上只能安装一个Tomcat:解压版:无需安装,解压即可用 ...

  10. 查看linux文件目录的大小和文件夹包含的文件数

    du -h --max-depth=|sort -n du -h --max-depth=|grep G|sort -n df -h 清理/var/log # 清除 # 一定要以root身份来运行这个 ...