029-OpenCV直方图单通道、多通道

话不多说,上代码,看结果。


import cv2  # 导入库
import numpy as np
from matplotlib import pyplot as plt

'''  
    cv2.imread(filename,flags)
# filename为文件名,图片与.py文件在一个文件夹时输入文件名即可
# 不在一个文件夹时输入图片的路径和名字
# flags为图片的颜色类型,默认为1,灰度图像为0
'''
img = cv2.imread('19.jpg', 0)
'''
cv2.namedWindow(winname,flags)
#  winname是窗口名字
#  flags为窗口显示方式,cv2.WINDOW_NORMAL为正常显示,可以调整大小
# cv2.WINDOW_AUTOSIZE显示原图片的大小,用户不能调整大小
'''
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
'''
   cv2.imshow(winname,mat)
# winname为显示的窗口
# mat 需要显示的图像
'''
cv2.imshow('img', img)
'''
    cv2.calcHist(images, channels, mask, histSize, ranges, hist, accumulate)
    计算直方图!!!! 不是画出来!!!1
# images:输入的图像
# channels:选择图像的通道
# mask:掩码,是一个大小和image一样的np数组,其中把需要处理的部分指定为1,不需要处理的部分指定为0,一般设置为None,表示处理整幅图像
# histSize:使用多少个bin(柱子),一般为256
# ranges:像素值的范围,一般为[0,255]表示0~255

# hist: 输出的目标直方图
# accumulate: 累计标识符, 默认值false, 若为true, 直方图在配置阶段不会被清零
'''
hist = cv2.calcHist([img], [0], None, [256], [0, 255])
'''
# plt.hist(src,pixels)
# src:数据源,注意这里只能传入一维数组,使用src.ravel()可以将二维图像拉平为一维数组。
# pixels:像素级,一般输入256。
# [0, 256] 直方图连在了一起,不输入就是一个个柱子
'''
plt.hist(img.ravel(), 256)
'''
# imshow()接收一张图像,只是画出该图,并不会立刻显示出来。
# imshow后还可以进行其他draw操作,比如scatter散点等。
# 所有画完后使用plt.show()才能进行结果的显示。
'''
plt.show()
'''
cv2.waitKey(delay)
#  delay为正数时,延时delay毫秒结束
#  想要用按下某个键时退出可用以下方法:
#  if(cv2.waitKey(0)  == ord('q')):
        exit(0)
#别的方法也行,不唯一
'''
if cv2.waitKey(0) & 0xFF == 27:
    exit(0)
'''
cv2.destroyWindow(winname)
#结束窗口,winname为窗口名
cv2.destroyAllWindows() 
#结束所有窗口
'''
cv2.destroyAllWindows()  # 销毁所有窗口

结果如下图。
在这里插入图片描述
接下来是直方图多通道。


import cv2  # 导入库
import numpy as np
from matplotlib import pyplot as plt

'''  
    cv2.imread(filename,flags)
# filename为文件名,图片与.py文件在一个文件夹时输入文件名即可
# 不在一个文件夹时输入图片的路径和名字
# flags为图片的颜色类型,默认为1,灰度图像为0
'''
img = cv2.imread('19.jpg')
'''
    cv2.cvtColor()
# 颜色空间转换
# img为要转换的图像,后者为转换的格式
# 颜色空间有很多种,最常见的就是RGB颜色空间
# R红色,G绿色,B蓝色,OpenCV中顺序是BGR!!!!!!!
# [255, 0,0]是蓝色,[0, 255, 0]表示绿色,[0, 0, 255]表示红色
    HSV颜色空间
# 也挺常用的,H是色调,S是饱和度,V是明度,具体百度就行
'''
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
'''
plt.axis(‘off’) 关闭坐标轴
plt.axis(‘square’) 作图为正方形,并且x,y轴范围相同
plt.axis(‘equal’)   x,y轴刻度等长
plt.axis([a, b, c, d]) 设置x轴的范围为[a, b],y轴的范围为[c, d]
'''
plt.axis("off")
'''
# imshow()接收一张图像,只是画出该图,并不会立刻显示出来。
# imshow后还可以进行其他draw操作,比如scatter散点等。
# 所有画完后使用plt.show()才能进行结果的显示。
'''
plt.imshow(img)
plt.show()  # 这两行代码效果等于 cv2.imshow(img)
'''
    mask 掩码
# 第一步建立与原图一样大小的mask图像,并将所有像素初始化为0,因此全图成了一张全黑色图。
# 第二步将mask图中的r1区域的所有像素值设置为255,也就是整个r1区域变成了白色。
# 这样就能得到Mask图像了。
'''
mask = np.zeros(img.shape[:2], np.uint8)
mask[130:327, 158:473] = 255
'''
cv2.namedWindow(winname,flags)
#  winname是窗口名字
#  flags为窗口显示方式,cv2.WINDOW_NORMAL为正常显示,可以调整大小
# cv2.WINDOW_AUTOSIZE显示原图片的大小,用户不能调整大小
'''
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
# cv2.imshow('img', img)
'''
    cv2.calcHist(images, channels, mask, histSize, ranges, hist, accumulate)
    计算直方图!!!! 不是画出来!!!1
# images:输入的图像
# channels:选择图像的通道
# mask:掩膜,是一个大小和image一样的np数组,其中把需要处理的部分指定为1,不需要处理的部分指定为0,一般设置为None,表示处理整幅图像
# histSize:使用多少个bin(柱子),一般为256
# ranges:像素值的范围,一般为[0,255]表示0~255


# hist: 输出的目标直方图
# accumulate: 累计标识符, 默认值false, 若为true, 直方图在配置阶段不会被清零
'''
color = ('b', 'g', 'r')     # <class 'tuple'>  元组类型
# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,
# 同时列出数据和数据下标,一般用在 for 循环当中。
for i, col in enumerate(color):
    hist = cv2.calcHist([img], [i], mask, [256], [0, 256])
    # print(type(hist))       # <class 'numpy.ndarray'>
    # plt.hist(img.ravel(), 256, [0, 256])        # 使用src.ravel()可以将二维图像拉平为一维数组。
    '''
    # plt.plot()函数是matplotlib.pyplot模块下的一个函数, 用于画图
        plt.plot(x, y, "格式控制字符串")
    # "格式控制字符串"最多可以包括三部分, "颜色", "点型", "线型"
    '''
    plt.plot(hist, color=col)
    '''
        设置x轴的数值显示范围
    # plt.xlim(xmin, xmax)
    # xmin:x轴上的最小值
    # xmax:x轴上的最大值
    # 上面的函数功能,调用签名和参数说明同样可以平移到函数ylim()上。
    '''
    plt.xlim([0, 256])
plt.show()

'''
cv2.waitKey(delay)
#  delay为正数时,延时delay毫秒结束
#  想要用按下某个键时退出可用以下方法:
#  if(cv2.waitKey(0)  == ord('q')):
        exit(0)
#别的方法也行,不唯一
'''
if cv2.waitKey(0) & 0xFF == 27:
    exit(0)
'''
cv2.destroyWindow(winname)
#结束窗口,winname为窗口名
cv2.destroyAllWindows() 
#结束所有窗口
'''
cv2.destroyAllWindows()  # 销毁所有窗口

结果如下图。
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值