python 直方图每个bin中的值_opencv-python直方图操作

Histograms

0-255说明你需要256个点来描述一个直方图

术语

BINS:上面的直方图显示每个像素值的像素数量,即从0到255。举个例子,如果将直方图分成16份,那么每一份就是一个组,也就是16个像素;我们把这一个组称之为BIN

DIMIS:收集数据的参数数量,这个例子中我们只收集关于一个东西的数据,强度值这里是1。

直方图均衡

import cv2

def histogramEqualizeColor(img):

ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB)

channels = cv2.split(ycrcb)

print len(channels)

cv2.equalizeHist(channels[0], channels[0])

cv2.merge(channels, ycrcb)

cv2.cvtColor(ycrcb, cv2.COLOR_YCR_CB2BGR, img)

return img

自适应直方图均衡

# -*-coding:utf-8-*-

import cv2

import numpy as np

# 自适应直方图均衡

def histogram_adapting_equal(image):

'''

:param image:输入的图片,需要是opencv的灰度单通道图

:return: 直方图均衡处理后图

'''

clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8))

cll = clahe.apply(image)

return cll

直方图拉伸

# -*-coding:utf-8-*-

import cv2

import numpy as np

def histogram_scale_color(img, minBinNo=0, maxBinNo=250):

# 使用Numpy函数计算直方图

# hist, bins = np.histogram(img.flatten(), 256, [0, 256])

hist = cv2.calcHist([img], [0], None, [256], [0, 256])

lut = np.zeros(256, dtype=img.dtype) # 创建空的查找表

# 计算从左边起第一个不为0的直方图位置

for binNo, binValue in enumerate(hist):

if binValue != 0:

# minBinNo = binNo

break

# 计算从右边起第一个不为0的直方图位置

for binNo, binValue in enumerate(hist):

if binValue != 0:

# maxBinNo = 255 - binNo

break

print 'minBinNo : ', minBinNo, ' , maxBinNo : ', maxBinNo

for i, v in enumerate(lut):

if i < minBinNo:

print '小于minBinNo, 赋值为0'

lut[i] = 0

elif i > maxBinNo:

print '大于maxBinNo, 赋值为255'

lut[i] = 255

else:

lut[i] = int(255.0 * (i - minBinNo) / (maxBinNo - minBinNo) + 0.5)

result = cv2.LUT(img, lut)

return result

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV-Python ,可以使用 `cv2.calcHist` 函数计算数据集的直方图,然后使用 `cv2.normalize` 函数将直方图归一化,最后使用 `cv2.imwrite` 函数将直方图保存为图像文件。具体步骤如下: 1. 读取数据集,并将其转换为灰度图像。 ``` import cv2 import numpy as np dataset = np.load("dataset.npy") dataset_gray = cv2.cvtColor(dataset, cv2.COLOR_BGR2GRAY) ``` 2. 计算直方图。这里以灰度图像为例,计算灰度范围为 [0, 255] 的直方图。 ``` hist = cv2.calcHist([dataset_gray], [0], None, [256], [0, 256]) ``` 3. 归一化直方图。 ``` cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX) ``` 4. 创建直方图图像。 ``` hist_image = np.zeros((256, 256), dtype=np.uint8) ``` 5. 绘制直方图。 ``` bin_width = hist_image.shape[1] / hist.shape[0] for i in range(hist.shape[0]): x = int(i * bin_width) y = int(hist_image.shape[0] - np.round(hist[i])) cv2.line(hist_image, (x, hist_image.shape[0]), (x, y), 255) ``` 6. 保存直方图图像。 ``` cv2.imwrite("histogram.png", hist_image) ``` 这里将直方图保存为 PNG 格式,文件名为 "histogram.png"。 完整代码示例: ``` import cv2 import numpy as np # 读取数据集 dataset = np.load("dataset.npy") # 转换为灰度图像 dataset_gray = cv2.cvtColor(dataset, cv2.COLOR_BGR2GRAY) # 计算直方图 hist = cv2.calcHist([dataset_gray], [0], None, [256], [0, 256]) # 归一化直方图 cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX) # 创建直方图图像 hist_image = np.zeros((256, 256), dtype=np.uint8) # 绘制直方图 bin_width = hist_image.shape[1] / hist.shape[0] for i in range(hist.shape[0]): x = int(i * bin_width) y = int(hist_image.shape[0] - np.round(hist[i])) cv2.line(hist_image, (x, hist_image.shape[0]), (x, y), 255) # 保存直方图图像 cv2.imwrite("histogram.png", hist_image) ``` 这段代码将读取名为 "dataset.npy" 的数据集,将其转换为灰度图像,并计算并绘制其直方图,并将直方图保存为名为 "histogram.png" 的文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值