8

我只是想调整灰度图像中的对比度/亮度,以使用 C 中的 Opencv 突出显示该图像中的白色。我该怎么做?是否有任何功能可以在 opencv 中完成此任务?

原图:

在此处输入图像描述

修改后的图像:

在此处输入图像描述

提前致谢!

4

3 回答 3

11

我认为您可以通过两种方式在这里调整对比度:

1)直方图均衡:

但是当我用你的图像尝试这个时,结果并不像你预期的那样。在下面检查:

在此处输入图像描述

2)阈值

在这里,我将输入的每个像素值与任意值(我取的127)进行了比较。以下是在 opencv 中具有内置功能的逻辑。But remember, output is Binary image, not grayscale as you did.

If (input pixel value >= 127):
    ouput pixel value = 255
else:
    output pixel value = 0

以下是我得到的结果:

在此处输入图像描述

为此,您可以使用阈值函数比较函数

3)如果您必须将灰度图像作为输出,请执行以下操作

(代码在 OpenCV-Python 中,但对于每个函数,相应的 C 函数都可以在 opencv.itseez.com 中获得)

for each pixel in image:
   if pixel value >= 127: add 'x' to pixel value.
   else : subtract 'x' from pixel value. 

(“x”是一个任意值。)因此,亮像素和暗像素之间的差异会增加。

img = cv2.imread('brain.jpg',0)

bigmask = cv2.compare(img,np.uint8([127]),cv2.CMP_GE)
smallmask = cv2.bitwise_not(bigmask)

x = np.uint8([90])
big = cv2.add(img,x,mask = bigmask)
small = cv2.subtract(img,x,mask = smallmask)
res = cv2.add(big,small)

下面是得到的结果:

在此处输入图像描述

于 2012-05-11T13:01:48.553 回答
11

您还可以查看 OpenCV CLAHE 算法。它不是全局均衡直方图,而是将图像分割成图块并在局部均衡它们,然后将它们拼接在一起。这可以提供更好的结果。

在 OpenCV 3.0.0 中使用您的图像:

import cv2
inp = cv2.imread('inp.jpg',0)
clahe = cv2.createCLAHE(clipLimit=4.0, tileGridSize=(8,8))
res = clahe.apply(inp)
cv2.imwrite('res.jpg', res)

给了一些很好的东西

在 CLAHE 之后

在这里阅读更多关于它的信息,虽然它不是很有帮助: http ://docs.opencv.org/3.1.0/d5/daf/tutorial_py_histogram_equalization.html#gsc.tab=0

于 2016-03-03T06:23:51.257 回答
0

虽然这篇文章有点陈旧:使用“cvAddWeighted()”怎么样?

它的作用是:

             dst = src1*alpha + src2*beta + gamma

我从应用亮度和对比度中了解到,一个人想要做的是:

             dst = src*contrast + brightness;

因此,如果

             src1  = input image
             src2  = any image of same type as src1
             alpha = contrast value
             beta  = 0.0
             gamma = brightness value
             dst   = resulting Image (must be of same type as src1)

一个人应该完成这项任务,不是吗?

这个方法适用于我使用 CvMat* 图像

于 2018-11-15T15:57:47.087 回答