我只是想调整灰度图像中的对比度/亮度,以使用 C 中的 Opencv 突出显示该图像中的白色。我该怎么做?是否有任何功能可以在 opencv 中完成此任务?
原图:
修改后的图像:
提前致谢!
我认为您可以通过两种方式在这里调整对比度:
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)
下面是得到的结果:
您还可以查看 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
虽然这篇文章有点陈旧:使用“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* 图像