相关疑难解决方法(0)

使用OpenCV自动调整一张纸的彩色照片的对比度和亮度

拍摄一张纸时(例如,使用电话摄像头),我得到以下结果(左图)(jpg 在此处下载)。所需的结果(使用图像编辑软件手动处理)在右侧:

我想用openCV处理原始图像,以自动获得更好的亮度/对比度(以使背景更白)。

假设:图像具有A4纵向格式(在本主题中,我们无需对其进行透视变形),并且纸页为白色,可能带有黑色或彩色的文本/图像。

到目前为止,我已经尝试过:

  1. 各种自适应阈值方法,例如高斯,OTSU(请参阅OpenCV doc 图像阈值)。通常可以与OTSU配合使用:

    ret, gray = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)
    
    Run Code Online (Sandbox Code Playgroud)

    但仅适用于灰度图像,不适用于彩色图像。此外,输出是二进制(白色或黑色),我不希望这样:我更喜欢保留彩色非二进制图像作为输出

  2. 直方图均衡

    • 应用于Y(在RGB => YUV变换之后)
    • 或应用于V(在RGB => HSV变换之后),

    如本建议答案(直方图均衡化不是彩色图像的工作- OpenCV的)或该一个(OpenCV的Python的equalizeHist彩色图像):

    img3 = cv2.imread(f)
    img_transf = cv2.cvtColor(img3, cv2.COLOR_BGR2YUV)
    img_transf[:,:,0] = cv2.equalizeHist(img_transf[:,:,0])
    img4 = cv2.cvtColor(img_transf, cv2.COLOR_YUV2BGR)
    cv2.imwrite('test.jpg', img4)
    
    Run Code Online (Sandbox Code Playgroud)

    或使用HSV:

    img_transf = cv2.cvtColor(img3, cv2.COLOR_BGR2HSV)
    img_transf[:,:,2] = cv2.equalizeHist(img_transf[:,:,2])
    img4 = cv2.cvtColor(img_transf, cv2.COLOR_HSV2BGR)
    
    Run Code Online (Sandbox Code Playgroud)

    不幸的是,结果非常糟糕,因为它会在本地创建可怕的微对比度(?):

    我还尝试了YCbCr,这很相似。

  3. 我还尝试了CLAHE(对比度受限的自适应直方图均衡化),范围tileGridSize从 …

python opencv image-processing computer-vision image-thresholding

40
推荐指数
5
解决办法
3094
查看次数

如何在Python OpenCV中增加图像的对比度

我是Python OpenCV的新手.我在这里阅读了一些文档和答案,但我无法弄清楚以下代码的含义:

if (self.array_alpha is None):
    self.array_alpha = np.array([1.25])
    self.array_beta = np.array([-100.0])

# add a beta value to every pixel 
cv2.add(new_img, self.array_beta, new_img)                    

# multiply every pixel value by alpha
cv2.multiply(new_img, self.array_alpha, new_img)  
Run Code Online (Sandbox Code Playgroud)

我已经知道了Basically, every pixel can be transformed as X = aY + b where a and b are scalars..基本上,我已经理解了这一点.但是,我不明白代码以及如何增加对比度.

直到现在,我已经设法简单地使用了图像 img = cv2.imread('image.jpg',0)

谢谢你的帮助

python opencv

15
推荐指数
6
解决办法
6万
查看次数