c++ - 如何使用 OpenCV 使用最小值和最大值调整亮度和对比度

标签 c++ opencv

在 ImageJ 中,您可以使用最小值和最大值调整图像的亮度和对比度。您还可以使用 setMinAndMax() 宏函数。对话框如下所示:

ImageJ Brightness and Contrast dialog

它映射每个像素以适应最小值和最大值。

我正在尝试在 OpenCV (C++) 中做同样的事情。我可以使用 Mat::convertTo()alphabeta 参数更改对比度和亮度,但我不知道如何用最小值和最大值来做。

在我的例子中,我使用的是 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/

相关文章:

c++ - MFC 应用程序中的堆栈溢出 C00000FD

python - 在 OSX 中为 python3 安装 opencv3

android - Highgui.imread返回大小为0x0的Mat

c++ - 运动结构 (openCV) : ‘reconstruct’ was not declared in this scope

c++ - 如何运行一个在 C++ 中有指针的函数?

c++ - sfinae 上下文中的模板变量

c++ - COM 错误 0x80004003(无效指针)访问 MS Outlook 联系人

c++ - OpenCV 中的逆傅里叶变换

c++ - OpenCV haarcascades加载根本不起作用

c++ - 不区分大小写的比较