opencv histograms-直方图

本文详细介绍如何使用OpenCV和NumPy计算图像的直方图,并利用Matplotlib进行直观展示。涵盖cv.calcHist()和np.histogram()函数的使用,以及通过掩膜图像限定感兴趣区域的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容:

  • 计算直方图
  • 画出直方图
  • 学习几个函数cv.calcHist(), np.histogram(), etc

理论

直方图即使统计各个像素值频数的统计图。具体可以百度。

名词解析:

  • BINS: 可以认为这是每个段的像素值的个数,比如设置16,则分别统计的是 0 to 15, then 16 to 31, …, 240 to 255.频数。默认是1。
  • DIMS:表示的是数据的维度。默认为1。
  • RANGE:表示的是要统计的强度值的范围。

其他函数

  1. ravel()表示将图片摊平,变成一维的

1.计算直方图

opencv中如何计算直方图

关于cv.calcHist()参数的介绍——
cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
  1. images: 源图像(uint8 or float32),放入格式为“[img]”
  2. channels: 要统计直方图的通道,比如灰度图可以"[0]”,而RGB图形可以“[0]”,“[1]",“[2]",分别代表蓝、绿、红通道。
  3. mask: 掩膜图片。如果要感兴趣的范围需要用这个去限制,默认是None。
  4. histSize:表示BIN的数量,如果全部要计算那就是“[256]”.
  5. ranges:默认[0,256]
    example
img = cv.imread('home.jpg',0)
hist = cv.calcHist([img],[0],None,[256],[0,256])

numpy中如何计算直方图

hist,bins = np.histogram(img.ravel(),256,[0,256])

2. 绘制直方图

一般来说有两种方法:

  1. 简单:Matplotlib
  2. 复杂:OpenCV

1)使用Matplotlib

2

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('home.jpg',0)
plt.hist(img.ravel(),256,[0,256]); plt.show()

在这里插入图片描述
2

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('home.jpg')
color = ('b','g','r')
for i,col in enumerate(color):
    histr = cv.calcHist([img],[i],None,[256],[0,256])
    plt.plot(histr,color = col)
    plt.xlim([0,256])
plt.show()

在这里插入图片描述

快速构建掩膜图像

# create a mask
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:300, 100:400] = 255
masked_img = cv.bitwise_and(img,img,mask = mask)

plt.subplot(221), plt.imshow(img[:,:,0],'gray')
plt.subplot(222), plt.imshow(mask[:,:],'gray')
plt.subplot(223), plt.imshow(masked_img[:,:,0],'gray'

\a1
参考链接:
https://docs.opencv.org/trunk/d1/db7/tutorial_py_histogram_begins.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值