在图像上应用二维颜色直方图

2024-04-26 02:16:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图获得一些图像的2D直方图值,但我真的迷路了。如果我没有错的话,我可以用来自numpynp.histogram2d()来做这件事

我想做的是

def hist2d(img, bins):
     b_channel, g_channel, r_channel    = img[:, :, 0], img[:, :, 1], img[:, :, 2]
     channels = [b_channel, g_channel, r_channel]

     c1 = np.histogram2d(b_channel,g_channel, bins=bins_per_hist)
     c2 = np.histogram2d(g_channel,r_channel, bins=bins_per_hist)
     c3 = np.histogram2d(r_channel,b_channel, bins=bins_per_hist)

     # Finally concatenate results
     # np.concatenate()

    return result

我的想法是

  • 将图像分割为3个通道
  • 获取3个直方图2d
  • 返回一个由3个标准化二维直方图串联而成的numpy数组:B/G、B/R和G/R

你认为这个想法正确吗?如何使用np.histogram2d()函数?我不明白我该如何传递bins值。{a1}表示一个包含2个值的列表,但是什么值呢?我只有一个

注意:我正在用numpy做这件事,但也许还有另一个选择是openCV

多谢各位!我相信这很容易,但我也想学


Tags: 图像numpyimgdefnpchannel直方图hist
1条回答
网友
1楼 · 发布于 2024-04-26 02:16:07

在Python/OpenCV中更容易实现

输入:

enter image description here

import cv2

# read image
img = cv2.imread('mandril3.jpg')

# calculate 2D histograms for pairs of channels: BG, GR, RB
histBG = cv2.calcHist([img], [0, 1], None, [256, 256], [0, 256, 0, 256])
histGR = cv2.calcHist([img], [1, 2], None, [256, 256], [0, 256, 0, 256])
histRB = cv2.calcHist([img], [2, 0], None, [256, 256], [0, 256, 0, 256])

# merge 3 single channel historgrams into one color histogram
hist = cv2.merge([histBG,histGR,histRB])

# view results
cv2.imshow("hist", hist)
cv2.waitKey(0)

# save result
# result is float and counts need to be scale to range 0 to 255
hist_scaled = cv2.normalize(hist, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
cv2.imwrite('mandril3_histogram.png', hist_scaled)


颜色直方图:

enter image description here

相关问题 更多 >

    热门问题