【问题标题】:Histogram Equalization Python For Colored Image彩色图像的直方图均衡 Python
【发布时间】:2017-03-08 03:14:25
【问题描述】:

我是 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

有点卡在寻找错误,如果有人可以帮助我,那就太棒了

【问题讨论】:

  • 您应该在问题中包含输出,而不是作为超链接

标签: python opencv


【解决方案1】:

根据问题标题,您希望通过在YCrCb 域中拆分彩色图像的直方图来均衡它。编写自己的用于均衡直方图的算法是没有意义的,正如附加的代码 sn-p 中所示,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)

输入:

输出:

【讨论】:

  • 作者特别提到要自己实现这个功能,所以我猜他知道OpenCV内置的功能。我不同意对已经解决的问题实施自己的解决方案是没有意义的。从教育的角度来看,它很有帮助:让您更深入地了解 equalizeHist() 背后的过程,并教您低级图像处理的许多重要方面。
猜你喜欢
  • 2017-12-03
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 2013-01-25
  • 1970-01-01
  • 2019-07-21
相关资源
最近更新 更多