在OpenCV里实现部分图像的直方图

在前面计算直方图时,总是计算整个图像的直方图,有没有办法计算部分区域的直方图呢?这时要使用函数:

hist=cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])

在这里要使用mask参数,就可以计算部分图像的直方图了。例子如下:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import numpy as np
import cv2
from matplotlib import pyplot as plt

#读取图片
img = cv2.imread('dft6.png',0)

h,w = img.shape[:2]
#创建一个mask
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:400, 100:600] = 255
masked_img = cv2.bitwise_and(img,img,mask = mask)

#计算直方图:不带mask和带mask
hist_full = cv2.calcHist([img],[0],None,[256],[0,256])
hist_mask = cv2.calcHist([img],[0],mask,[256],[0,256])

#输出比较图片
plt.subplot(221), plt.imshow(img, 'gray') #显示原图
plt.subplot(222), plt.imshow(mask,'gray') #显示mask
plt.subplot(223), plt.imshow(masked_img, 'gray') #显示mask后的图
plt.subplot(224), plt.plot(hist_full), plt.plot(

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览

应支付9.90元
点击重新获取
扫码支付

支付成功即可阅读