Har*_*att 6 python opencv histogram
我正在尝试线性缩放图像,以便使用整个灰度范围。这是为了改善镜头的照明。然而,在绘制直方图时,我不知道如何获得缩放后的直方图,使其更平滑,从而成为离散箱所渴望的曲线。任何提示或要点将不胜感激。
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread(r'/Users/harold/Documents/Academia/Nottingham Uni/Year 4/ImageProcessing/Imaging_Task_Sheet/PointImage.jpeg', cv.IMREAD_GRAYSCALE)
img_s = img/255
img_s = img_s / np.max(img_s)
img_s = img_s*255
histogram = cv.calcHist([img], [0], None, [256], [0, 256])
histogram1 = cv.calcHist([img_s.astype('uint8')], [0], None, [256], [0, 256])
plt.figure()
plt.title("Grayscale Histogram")
plt.xlabel("grayscale value")
plt.ylabel("pixels")
plt.plot(histogram, label='Original Image') # <- or here
plt.plot(histogram1, label='Equalised Image') # <- or here
Run Code Online (Sandbox Code Playgroud)
生成的直方图为:
出自这张图片:
我认为您想到的是一条穿过您的点的样条曲线。操作方法如下:
\nimport cv2 as cv\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nfrom scipy import interpolate\n\nimg = cv.imread(r\'3NKTJ.jpg\', cv.IMREAD_GRAYSCALE)\n\nimg_s = img/255\nimg_s = img_s / np.max(img_s)\nimg_s = img_s*255\n\nhistogram = cv.calcHist([img], [0], None, [256], [0, 256])\nhistogram1 = cv.calcHist([img_s.astype(\'uint8\')], [0], None, [256], [0, 256])\n\nx=np.linspace(0,len(histogram1),len(histogram1)) # x: 0 --> 255 with step=1\n\nX=np.where(histogram1>0)[0] # extract bins with non-zero histogram1 values\nY=histogram1[X] # the corresponding Y values\n\nF=interpolate.splrep(X, Y) # spline representation of (X,Y)\nYnew = interpolate.splev(x, F) # calculate interpolated Ynew\n\nplt.figure()\nplt.title("Grayscale Histogram")\nplt.xlabel("grayscale value")\nplt.ylabel("pixels")\n\nplt.plot(histogram, label=\'Original Image\') # <- or here\nplt.plot(histogram1, label=\'Equalised Image\') # <- or here\nplt.plot(x,Ynew, label=\'spline interpolation of Equalised Image\')\nRun Code Online (Sandbox Code Playgroud)\n\n最好的问候,\nSt\xc3\xa9phane
\n| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |