如何在C中调整OpenCV的对比度?

问题描述 投票:0回答:3

我只是想用 C 中的 Opencv 调整灰度图像中的对比度/亮度以突出显示该图像中的白色。我该怎么做? opencv中有没有函数可以完成这个任务?

原图:

enter image description here

修改后的图像:

enter image description here

提前致谢!

c opencv image-processing contrast
3个回答
12
投票

您还可以查看 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)

提供一些非常好的东西

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


11
投票

我认为你可以通过两种方式调整对比度:

1) 直方图均衡:

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

enter image description here

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

下面是我得到的结果:

enter image description here

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

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)

下面是得到的结果:

enter image description here


1
投票

虽然这篇文章有点老了: 使用“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* 图像

© www.soinside.com 2019 - 2024. All rights reserved.