python +opencv图像处理(十一)——图像直方图

本文详细介绍了如何为14位的图像创建256个bin的直方图,通过计算bin的大小并使用OpenCV库进行直方图的绘制,展示了如何利用Python代码实现这一过程,适用于图像处理和计算机视觉领域的学习和研究。

Bin的大小=图像中不同像素值得个数/Bin的数目
对于14位的图像,创建256个bin直方图
bin size = (2^14)/256 = 64
h(0) ← 0 ≤ I(u,v) < 64
h(1) ← 64 ≤ I(u,v) < 128

h(j) ← aj ≤ I(u,v) < aj+1

h(255) ← 16320 ≤ I(u,v) < 16384

from cv2 import cv2 as cv
import numpy as np 
import matplotlib.pyplot as plt
# from matplotlib import pyplot as plt

def plot_demo(image):
    plt.hist(image.ravel(),256,[0,256])
    # image.ravel() 将图像转成一维数组
    plt.show()   

def image_hist(image):
    color = ('blue','green','red')
    for i,color in enumerate(color):
        '''
        对一个列表or数组即要遍历索引又要遍历元素时,
        使用内置的enumerate函数,它会将列表or数组组成一个索引序列
        '''
        hist = cv.calcHist([image],[i],None,[256],[0,256])
        '''
        cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
        images:输入图像,写程序时必须加括号即[images]
        channels:处理的通道,也必须加括号即[channel]
        mask:直方图的模板区域,默认None即计算整幅图像的直方图。
        histSize:直方图格子间隔的宽度大小。
        ranges:直方图横轴范围。
        '''
        plt.plot(hist,color=color)
        plt.xlim([0,256])
    plt.show()

# 可以根据直方图得到该图形的主要特征,以后使用分割也有用

if __name__ == "__main__":
    filepath = "C:\\pictures\\6.jpg"
    img = cv.imread(filepath)       # blue green red
    cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
    cv.imshow("input image",img)

    plot_demo(img)
    image_hist(img)

    cv.waitKey(0)
    cv.destroyAllWindows()

话不多说,贴图
在这里插入图片描述
在这里插入图片描述

### Python OpenCV 图像处理教程系列 #### 一、基础知识与环境搭建 对于希望深入了解Python OpenCV图像处理技术的学习者而言,掌握基础知识和正确配置开发环境至关重要。学习者应熟悉Python编程语言以及OpenCV库的基本操作,包括但不限于读取图片文件、显示图片窗口等功能[^1]。 ```python import cv2 # 加载一张彩色图像 img = cv2.imread('image.jpg', 1) # 显示图像 cv2.imshow('Image Window Title', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` #### 二、高级技巧探索 当掌握了基本概念之后,可以进一步研究更复杂的主题,比如图像变换、增强及复原等方面的内容。这些技能能够帮助开发者实现诸如旋转、缩放、滤波等多种效果,在实际应用中有广泛用途。 - **图像变换** 对于图像变换这一领域来说,它涵盖了仿射变换(Affine Transformation)、透视变换(Perspective Transformation)等多个方面。利用OpenCV提供的函数接口,用户可以根据需求轻松完成不同类型的几何变化任务。 - **图像增强** 提升视觉质量也是图像处理的重要目标之一。通过调整亮度对比度参数或是采用直方图均衡化等手段,可以使原始素材变得更加清晰易辨认。 - **图像复原** 面对受损或模糊不清的照片资料时,则需借助专门设计的修复算法来进行补救工作。去噪、超分辨率重建都是常见且有效的恢复措施。 #### 三、实践案例分析 理论联系实际是巩固所学知识的有效途径。参考具体实例有助于加深理解并积累实战经验。例如,在GitHub平台上存在许多开源项目可供借鉴学习;其中不乏高质量的作品展示了丰富的应用场景和技术细节[^2]。 此外,还有针对特定场景下的优化方案值得探讨——如图像叠加效果制作过程中的透明度控制策略就涉及到一系列有趣的技术要点[^3]: ```python import numpy as np import cv2 def blend_images(img1, img2, alpha=0.5): """Blend two images with given transparency factor.""" beta = (1.0 - alpha) dst = cv2.addWeighted(img1, alpha, img2, beta, 0.0) return dst # Create a list of blending factors from 0 to 1 by steps of 0.02. step_list = [float(0.02 * x) for x in range(0, 51)] for i in step_list: blended_img = blend_images(image_1, image_2, i) # Display or save the result... ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值