OpenCV半小时掌握基本操作之直方图

作者:我是小白呀 时间:2022-01-30 10:19:28 

【OpenCV】⚠️高手勿入!⚠️ 半小时学会基本操作 ⚠️ 直方图

概述

OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 20 课)

OpenCV半小时掌握基本操作之直方图

直方图

原图:

OpenCV半小时掌握基本操作之直方图

cv2.calcHist()可以帮助我们统计像素并得到直方图.

格式:


calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate=None)

参数:

  • images: 输入图像

  • channels: 颜色通道

  • mask: 掩模

  • histSize: bin 的数目, 用中括号括起来

  • ranges: 像素范围 [0, 256]

例 1 (灰度图统计直方图):


import cv2
from matplotlib import pyplot as plt

plt.style.use("fivethirtyeight")

# 读取图片, 并转换成灰度图
img = cv2.imread("girl.jpg", 0)

# 获取直方图
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
print(hist)

# 直方图展示
plt.figure(figsize=(12, 6))
plt.plot(hist)
plt.title("hist of image")
plt.show()

输出结果:

OpenCV半小时掌握基本操作之直方图

例 2 (RGB 三通道直方图):


import cv2
from matplotlib import pyplot as plt

plt.style.use("fivethirtyeight")
plt.figure(figsize=(12, 6))

# 读取图片
img = cv2.imread("girl.jpg")

# 颜色通道
color = ["b", "g", "r"]

# 获取直方图
for i, c in enumerate(color):
   hist = cv2.calcHist([img], [i], None, [256], [0, 256])
   plt.plot(hist, color=c)

# 直方图展示
plt.legend(["B Channel", "G Channel", "R Channel"])
plt.title("RGB hist of image")

plt.show()

输出结果:

OpenCV半小时掌握基本操作之直方图

直方图 + mask

例子:


import numpy as np
import cv2
from matplotlib import pyplot as plt

plt.style.use("fivethirtyeight")

# 读取图片, 并转换成灰度图
img = cv2.imread("girl.jpg", 0)

# 创建mask
mask = np.zeros(img.shape, np.uint8)
mask[280:1000, 420:1500] = 255

# 获取mask后的图像
masked_img = cv2.bitwise_and(img, img, mask=mask)

# 直方图
hist_full = cv2.calcHist([img], [0], None, [256], [0, 256])
hist_mask = cv2.calcHist([img], [0], mask, [256], [0, 256])

# 图片展示
f, ax = plt.subplots(2, 2, figsize=(12, 9))
ax[0, 0].imshow(img, 'gray')
ax[0, 0].set_title("original image")
ax[0, 1].imshow(mask, 'gray')
ax[0, 1].set_title("mask")
ax[1, 0].imshow(masked_img, 'gray')
ax[1, 0].set_title("masked image")
ax[1, 1].plot(hist_full)
ax[1, 1].plot(hist_mask)
ax[1, 1].set_title("original vs masked hist")

plt.show()

输出结果:

OpenCV半小时掌握基本操作之直方图

直方图均衡化

直方图均衡化 (Histogram Equalization) 是一种增强图片对比度的方法. 将一副图像的直方图分布变成近似均匀分布.

格式:


cv2.equalizeHist(src, dst=None)

例子:


import cv2
from matplotlib import pyplot as plt

plt.style.use("fivethirtyeight")

# 读取图片, 并转换成灰度图
img = cv2.imread("girl.jpg", 0)

# 均衡化
img_equ = cv2.equalizeHist(img)

# 直方图
f, ax = plt.subplots(2, 2, figsize=(16, 16))
ax[0, 0].imshow(img, "gray")
ax[0, 0].set_title("before")
ax[0, 1].imshow(img_equ, "gray")
ax[0, 1].set_title("after")
ax[1, 0].hist(img.ravel(), 256)
ax[1, 1].hist(img_equ.ravel(), 256)

plt.show()

输出结果:

OpenCV半小时掌握基本操作之直方图

来源:https://blog.csdn.net/weixin_46274168/article/details/119092739

标签:OpenCV,直方图,python
0
投稿

猜你喜欢

  • pandas 转换成行列表进行读取与Nan处理的方法

    2021-10-24 14:27:41
  • Python简单实现网页内容抓取功能示例

    2023-01-09 00:32:30
  • Python实现的圆形绘制(画圆)示例

    2023-01-09 12:41:36
  • SQL Server性能的改进得益于逻辑数据库设计

    2009-10-23 13:55:00
  • Python pyecharts 数据可视化模块的配置方法

    2022-12-09 06:24:26
  • Python3.4编程实现简单抓取爬虫功能示例

    2022-04-23 17:48:15
  • Python脚本实现12306火车票查询系统

    2021-07-10 10:05:27
  • Python利用Pydub实现自动分割音频

    2022-10-08 22:02:48
  • 基于python实现模拟数据结构模型

    2022-11-12 23:44:01
  • python绘制高斯曲线

    2023-01-06 06:48:33
  • python3中宏HAVE_VFORK的使用

    2021-05-22 07:22:21
  • Python操作RabbitMQ服务器实现消息队列的路由功能

    2022-06-21 00:50:39
  • asp和php页面全面封杀WVS扫描器的代码

    2011-02-28 10:43:00
  • python pycharm最新版本激活码(永久有效)附python安装教程

    2022-08-16 14:08:56
  • js加密页面代码生成器

    2007-10-12 13:40:00
  • python中xlwt模块的具体用法

    2023-11-08 07:10:15
  • Python中的is和==比较两个对象的两种方法

    2021-09-15 21:23:14
  • Python算法之栈(stack)的实现

    2022-09-01 15:26:15
  • 基于python+opencv调用电脑摄像头实现实时人脸眼睛以及微笑识别

    2023-07-08 23:31:14
  • Python帮你解决手机qq微信内存占用太多问题

    2023-04-02 18:14:44
  • asp之家 网络编程 m.aspxhome.com