opencv基本操作三(提取并显示图像彩色直方图)

opencv基本操作三

  • 要点
  • 代码

要点

  • cv2.calcHist ([图片], [要统计直方图的通道], mask, [直方图横轴的坐标范围], [要统
    计的通道的取值范围])
    -> 计算图像直方图的函数
    • mask掩膜,可以看作一张图片。效果为掩膜上灰度值为 0 的像素点的坐标为(x,y),
      那么要统计直方图的图片对应坐标(x,y)上的像素点不加入直方图统计。None 则统计图
      片全部像素点。
  • 可以使用 Pygal 创建直方图,关于 Pygal 可以参考这里
  • cv2.resize() 函数中可以选择 interpolation 决定其插值方式参考这里
  • 另一绘图工具 pyplot 用法参考这里

代码

  • 本例程读取一张彩色图像,并使用 OpenCV 的 cv2.calcHist() 函数获取该图像的直方图信息,然后分别利用 Pygal、plt(matplotlib.pyplot) 工具将直方图信息表现出来。
import cv2
import matplotlib.pyplot as plt
import numpy as np
import pygal

#读取图片
img_origin = cv2.imread('1.ImageProcess.jpg')
img_height, img_width, img_channels = img_origin.shape #获取图片尺寸高度、宽度、通道数
#cv2.imshow("windows_origin", img_origin) #窗口显示图片


#缩小图片尺寸,再次获取图片尺寸
img = cv2.resize(img_origin,(int(img_height/2),int(img_width/2)),interpolation=cv2.INTER_AREA)
img_height, img_width, img_channels = img.shape
#cv2.imshow("windows", img) #显示图片缩小后的图片

mask = np.zeros((int(img_height),int(img_width),1),dtype=np.uint8)#创建一张灰度图像
#cv2.calcHist([图片], [要统计直方图的通道], mask, [直方图横轴的坐标范围], [要统计的通道的取值范围])
#mask为掩膜,可以看作一张图片。效果为掩膜上灰度值为0的像素点的坐标为(x,y),
#那么要统计直方图的图片对应坐标(x,y)上的像素点不加入直方图统计。None则统计图片全部像素点。
hist_B = cv2.calcHist([img],[0],mask,[100],[0,256])
hist_G = cv2.calcHist([img], [1], mask, [100], [0,256])
hist_R = cv2.calcHist([img], [2], mask, [100], [0,256])


###使用Pygal创建直方图
#使用Pygal创建直方图需要把数据先转换为整型
Hist_B_int=[]
Hist_G_int=[]
Hist_R_int=[]
for i in hist_B:
    Hist_B_int.append(int(i))
for i in hist_G:
    Hist_G_int.append(int(i))
for i in hist_R:
    Hist_R_int.append(int(i))

#使用Pygal创建蓝色直方图并保存为svg文件(使用浏览器打开)
hist_pygal_B = pygal.Bar()
hist_pygal_B.title="pygal_B"
hist_pygal_B.add('Hist_B',Hist_B_int)
hist_pygal_B.x_labels = range(0,100)
hist_pygal_B.render_to_file('pygal_B.svg')

#使用Pygal创建绿色直方图并保存为svg文件(使用浏览器打开)
hist_pygal_G = pygal.Bar()
hist_pygal_G.title = 'pygal_G'
hist_pygal_G.add('Hist_G',Hist_G_int)
hist_pygal_G.x_labels = range(0,100)
hist_pygal_G.render_to_file('pygal_B.svg')

#使用Pygal创建红色直方图并保存为svg文件(使用浏览器打开)
hist_pygal_R=pygal.Bar()
hist_pygal_R.title = 'pygal_G'
hist_pygal_R.add('Hist_R',Hist_R_int)
hist_pygal_R.x_labels = range(0,100)
hist_pygal_R.render_to_file('pygal_R.svg')

###使用Plt创建直方图
#使用plt创建BGR彩色直方图
plt.figure("BGR_hist")
plt.title("Histogram of BGR")
plt.xlabel("Bins")
plt.ylabel("Numbers of Pixels")
plt.plot(hist_B,c='blue')
plt.plot(hist_G,c='green')
plt.plot(hist_R,c='red')
plt.xlim([0, 100])
plt.show()

你可能感兴趣的:(pytorch,学习,深度学习)