1

我有两种类型的图像要处理。一种具有白色背景,另一种具有深色背景。我的要求是为每种类型应用不同的阈值

例如:白色背景

(thresh, img_bin) = cv2.threshold(img, 128 , 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

用于深色背景

(thresh, img_bin) = cv2.threshold(img, 128 , 255, cv2.THRESH_BINARY_INV  + cv2.THRESH_OTSU)

我正在使用阅读图像cv.imread(img,0)

我正在做形态变换,所以我需要反转白色背景图像。但对于深色背景,我不想反转。

4

1 回答 1

0

要扩展 @nathancy 的评论,您可以使用 OpenCV 函数之一,summean

对于一个普通的旧 24 位彩色图像,黑色和白色由 (0, 0, 0) black (255, 255, 255) white

这是一个看起来像书页的示例图像: 在此处输入图像描述

现在让我们在上面运行一些代码

import cv2 as cv
import numpy as np

img = cv.imread('lorem_ipsum.png',cv.IMREAD_COLOR)

ret = cv.mean(img)
print(ret)

ret = cv.mean(ret)
print(ret)

ret = ret*4/3
print(ret)

ret = cv.mean(cv.mean(img))[0]*4/3
print(ret)

这给出了输出:

(229.78, 228.28, 228.95, 0.0)
(171.74, 0.0, 0.0, 0.0)
228.98
228.98

第一行给出了蓝色、绿色、红色和 alpha 通道的平均值。第二行是均值。因为第一行的条目为零,所以均值太低。我们要忽略 Alpha 通道。所以在最后一行,我们只选择平均值的第一个元素并将其缩放 4/3 以获得 0 到 255 的答案。我们的答案是 228.98 --> 图片大部分是白色的。最后一行是在一行中完成所有操作的结果。

于 2019-09-10T00:47:36.733 回答