• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    OpenCV半小时掌握基本操作之直方图

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

    概述

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

    直方图

    原图:

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

    格式:

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

    参数:

    例 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()
    

    输出结果:

    到此这篇关于OpenCV半小时掌握基本操作之直方图的文章就介绍到这了,更多相关OpenCV直方图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • OpenCV半小时掌握基本操作之图像裁剪融合
    • OpenCV半小时掌握基本操作之图像处理
    • opencv-python基本图像处理详解
    • OpenCV图像处理基本操作详解
    • Opencv图像处理之详解掩膜mask
    • 基于python的opencv图像处理实现对斑马线的检测示例
    • Python+OpenCV图像处理——图像二值化的实现
    • OpenCV半小时掌握基本操作之分水岭算法
    • OpenCV半小时掌握基本操作之傅里叶变换
    • OpenCV半小时掌握基本操作之图像轮廓
    • OpenCV半小时掌握基本操作之模板匹配
    • OpenCV半小时掌握基本操作之圆圈检测
    • OpenCV半小时掌握基本操作之对象测量
    • OpenCV半小时掌握基本操作之图像基础操作
    上一篇:使用OpenCV为图像加水印的教程
    下一篇:Python调用两个机器人聊天的实战
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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