我正在尝试线性缩放图像,以便使用整个灰度范围。这是为了改善镜头的照明。然而,在绘制直方图时,我不知道如何获得缩放后的直方图,使其更平滑,从而成为离散箱所渴望的曲线。任何提示或要点将不胜感激。
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)
生成的直方图为:
出自这张图片:
我对 C 很陌生,但我在一个看似非常微不足道的问题上遇到了麻烦。我想做的就是创建一个大小的数组,这样在运行时我不知道它的大小并且无法指定它。下面的代码运行得非常好。
int main()
{
int LuhnsArray[15] = {0};
for(int i = 0; i < 15; i++)
{
printf("%i ", LuhnsArray[i]);
printf("\n");
}
}
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试这样的事情时:
int main()
{
int length = 15;
int LuhnsArray[length] = {0};
for(int i = 0; i < length; i++)
{
printf("%i ", LuhnsArray[i]);
printf("\n");
}
}
Run Code Online (Sandbox Code Playgroud)
我认为合乎逻辑的东西(例如,我认为在 python 中可以工作的东西)会附带一个错误。有人可以指出我正确的方向吗?新手有机会提供帮助吗?