在 ImageJ 中,您可以使用最小值和最大值调整图像的亮度和对比度。您还可以使用 setMinAndMax()
宏函数。对话框如下所示:
它映射每个像素以适应最小值和最大值。
我正在尝试在 OpenCV (C++) 中做同样的事情。我可以使用 Mat::convertTo()
的 alpha
和 beta
参数更改对比度和亮度,但我不知道如何用最小值和最大值来做。
在我的例子中,我使用的是 12 位图像,因此像素值的范围是 0 到 4095。我不确定这是否重要。
最佳答案
你这样做。
首先,找到当前的最大值和最小值。
假设最暗和最亮分别为 80 和 220。现在您需要将这个范围 80..220 扩展到整个范围 0..4095。
因此,您从图像中的每个像素中减去 80,以向下移动到直方图左端的零,因此您的范围现在是 0..140。
现在您需要将每个像素乘以 4095/140 以将右端拉伸(stretch)到 4095。
实际上,您需要的公式是这样的:
newvalue = int((current value - darkest)*4095/(brightest-darkest))
关于c++ - 如何使用 OpenCV 使用最小值和最大值调整亮度和对比度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29980979/