话不多说,上代码,看结果。
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') # 元组类型
# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,
# 同时列出数据和数据下标,一般用在 for 循环当中。
for i, col in enumerate(color):
hist = cv2.calcHist([img], [i], mask, [256], [0, 256])
# print(type(hist)) #
# 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() # 销毁所有窗口