OpenCV半小时掌握基本操作之直方图
作者:我是小白呀 时间:2022-01-30 10:19:28
【OpenCV】⚠️高手勿入!⚠️ 半小时学会基本操作 ⚠️ 直方图
概述
OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 20 课)
直方图
原图:
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()
输出结果:
例 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()
输出结果:
直方图 + 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()
输出结果:
直方图均衡化
直方图均衡化 (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()
输出结果:
来源: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