python+OpenCV 彩色直方圖均衡化

about

本文參考了

灰色圖片直方圖均衡化

  • 代碼實(shí)現(xiàn)
import numpy as np
import cv2

im = cv2.imread('vi.jpg',0)         #當(dāng)前目錄下的圖片:vi.png
cv2.imshow('image1', im)
cv2.waitKey(0)

eq = cv2.equalizeHist(im)         #灰度圖片直方圖均衡化
cv2.imshow('image2',eq)
cv2.waitKey(0)

cv2.imwrite('vi2.jpg',eq)      #保存圖片在當(dāng)前目錄下
  • 顯示結(jié)果

原始圖片

vi.jpg

直方圖均衡化后

vi2.jpg
  • 但是cv2.equalizeHist()只提供灰度值圖片的處理,當(dāng)把上面的圖片換成RGB圖片時(shí),就會(huì)報(bào)錯(cuò)了。
... 
eq = cv2.equalizeHist(image)
cv2.error: /usr/local/opencv-3.1.0/modules/imgproc/src/histogram.cpp:3687: error: (-215) _src.type() == CV_8UC1 in function equalizeHist

cv2.equalizeHist only works on grayscale ( 1 channel ) images

Equalizes the histogram of a grayscale image.

  • 解決方案請(qǐng)往下看

彩色圖片直方圖均衡化

有興趣的同學(xué)可以簡(jiǎn)單看下這么做的原理是什么:

import numpy as np
import cv2


def hisEqulColor(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

im = cv2.imread('lena.jpg')
cv2.imshow('im1', im)
cv2.waitKey(0)

eq = hisEqulColor(im)
cv2.imshow('image2',eq )
cv2.waitKey(0)
cv2.imwrite('lena2.jpg',eq)
  • 原來圖片
lena.jpg

直方圖均衡化后

lena2.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容