Python之Opencv进阶教程(2):统计图片灰度级别的像素数量

1、什么是灰度像素数量

在OpenCV中,可以使用**cv2.calcHist()**函数来计算图像的直方图。直方图是一种图形统计表,用于表示图像中每个灰度级别(或颜色通道)的像素数量或密度分布。以下是一个示例代码,演示了如何使用OpenCV计算和绘制图像的直方图:

2、代码

python 复制代码
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np

img = cv.imread('../Resources/Photos/cats.jpg')
cv.imshow('Cats', img)

blank = np.zeros(img.shape[:2], dtype='uint8')

# gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# cv.imshow('Gray', gray)

mask = cv.circle(blank, (img.shape[1] // 2, img.shape[0] // 2), 100, 255, -1)

masked = cv.bitwise_and(img, img, mask=mask)
cv.imshow('Mask', masked)

# GRayscale histogram

# Colour Histogram

plt.figure()
plt.title('Colour Histogram')
plt.xlabel('Bins')
plt.ylabel('# of pixels')
colors = ('b', 'g', 'r')
for i, col in enumerate(colors):
    hist = cv.calcHist([img], [i], mask, [256], [0, 256])
    plt.plot(hist, color=col)
    plt.xlim([0, 256])

plt.show()

cv.waitKey(0)

在上面的示例中,首先使用cv2.imread()函数读取一张灰度图像(可以通过参数cv2.IMREAD_GRAYSCALE指定读取为灰度图像),然后使用cv2.calcHist()函数计算了图像的直方图。在这里,我们指定了计算直方图的参数:[image]表示要计算直方图的图像,[0]表示计算灰度级别为0的直方图,None表示不使用掩码,[256]表示直方图的区间数为256,[0, 256]表示像素值的范围。

最后,使用Matplotlib库中的函数绘制了直方图。你可以运行这段代码,将'path/to/your/image.jpg'替换为你自己的图像路径,查看图像的直方图。
需要注意的是:这段代码中使用了Matplotlib库来绘制直方图,因此需要确保你的环境中已经安装了Matplotlib库。

3、实现效果图

相关推荐
极光代码工作室4 分钟前
基于数据仓库的电商数据分析平台
大数据·hadoop·python·spark·数据可视化
开发小能手-roy10 分钟前
StringBuilder vs StringBuffer:2024年还需要线程安全字符串吗?
开发语言·python·安全
开发小能手-roy11 分钟前
Java集合框架选型指南:从ArrayList到ConcurrentSkipListMap
java·开发语言
凡人叶枫26 分钟前
Effective C++ 条款41:了解隐式接口和编译期多态
java·开发语言·c++·effective c++
AC赳赳老秦40 分钟前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
2601_954706491 小时前
云手机技术详解+Python实战调用|2026高稳云手机平台推荐
开发语言·python·智能手机
chushiyunen1 小时前
java中的路径处理、左右斜杠
java·开发语言·python
jay神1 小时前
基于 FastAPI + Vue 的宠物领养管理系统
前端·vue.js·python·毕业设计·fastapi·宠物
重生之后端学习1 小时前
Java入门
java·开发语言·职场和发展
碧海蓝天20221 小时前
C++法则24:在标准 C++ 中,没有任何可移植的方式判断指针 T* pt 指向的内存位置是否已经 构造了对象,程序员必须手动跟踪哪些元素已构造。
java·开发语言·c++