gpt4 book ai didi

python - 彩色图像的直方图均衡化 Python

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:51 24 4
gpt4 key购买 nike

我是 Opencv 的新手

我正在尝试以手动方式进行直方图均衡化,不知何故我的输出就像 this

首先,我首先将格式转换为 YCR_CB 格式,然后将其拆分为每个 y、cr 和 cb。然后我在 y 层上做了直方图均衡化。

这是我的代码:

    from __future__ import division
import cv2
import numpy as np

img1 = cv2.imread("sup.jpg")

img2 = cv2.cvtColor(img1,cv2.COLOR_BGR2YCR_CB)

y,cr,cb = cv2.split(img2)

#y = cv2.equalizeHist(y)

x =y

height,width = y.shape

hist = [0]*256
pmf = [0]*256
cdf = [0]*256
levelBaru = [0]*256

cv2.imshow("y before",x)
cv2.waitKey(0)

for i in range(0,height):
for j in range(0,width):
hist[y.item(i,j)] += 1
#hist[y[i,j]] += 1

for i in range(0,256):
#cari pmf
pmf[i] = round(hist[i]/(height*width),4)

print "pmf done"

cdf[0] = pmf[0]

for i in range(1,256): #cari cdf
cdf[i] = cdf[i-1]+pmf[i]

for i in range(1,256): #cari levelBaru
levelBaru[i] = int(cdf[i]*255)

for i in range(0,height): #baru
for j in range(0,width):
for k in range (0,256):
if(y.item(i,j)==k):
#print i," ",levelBaru[i]
y.itemset((i,j),levelBaru[k])

img2 = cv2.merge((y,cr,cb))
img2 = cv2.cvtColor(img2,cv2.COLOR_YCR_CB2BGR) #supaya ga error pas di stack


#cv2.namedWindow('result', cv2.WINDOW_NORMAL)
cv2.imshow('result',img2)

cv2.waitKey(0)
cv2.destroyAllWindows

有点卡住找 bug,如果有人能帮助我那就太棒了

最佳答案

根据问题标题,您希望通过在 YCrCb 域中拆分彩色图像的直方图来均衡它。没有必要编写自己的直方图均衡算法,因为它在附加的代码片段中显示,OpenCV 已经有一个方法作为 cv2.eqHist() 来为您服务目的。

import cv2

img = cv2.imread("path/to/Lenna.png")

img_y_cr_cb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
y, cr, cb = cv2.split(img_y_cr_cb)

# Applying equalize Hist operation on Y channel.
y_eq = cv2.equalizeHist(y)

img_y_cr_cb_eq = cv2.merge((y_eq, cr, cb))
img_rgb_eq = cv2.cvtColor(img_y_cr_cb_eq, cv2.COLOR_YCR_CB2BGR)

输入:

enter image description here

输出:

enter image description here

关于python - 彩色图像的直方图均衡化 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42651595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com