无论颜色变化如何,我都希望对图像进行阈值处理。 例如:
我想在输入中对这两个字母进行阈值处理并在输出中显示。但是当我对图像进行阈值处理时,只显示一个字母。我怎么能用Opencv和Python做到这一点?
附加信息示例:new example示例的两个输入图像显示一个图像的字母颜色比背景颜色浅,而另一个图像的字母颜色比较暗。我想要的是对这两个图像进行阈值以获得相同的输出。 (白色背景中的黑色字母)
答案 0 :(得分:1)
如果您直接将此彩色图像转换为灰色并对其进行阈值处理,那么您将获得此图像。它不适合两个A
:
但是如果你在BGR
中拆分频道,你会得到这个:
显然,B
频道的阈值可行。
#!/usr/bin/python3
# 2018.01.14 16:31:39 CST
# 2018.01.14 16:50:45 CST
import cv2
img = cv2.imread("img12.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
b,g,r = cv2.split(img)
th, threshed1 = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU)
th, threshed2 = cv2.threshold(b, 100, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU)
cv2.imwrite("threshed_gray.png", threshed1)
cv2.imwrite("threshed_blue.png", threshed2)
答案 1 :(得分:0)
如果您的背景是恒定颜色,则可以搜索精确或非常接近的匹配并从中创建新图像。无论颜色在哪里,背景颜色都设置为白色像素,否则设置为黑色像素。不需要阈值处理。
这是PIL而不是Opencv的样子:
from PIL import Image
im = Image.open(filename)
ld = im.load()
bg_r, bg_g, bg_b = ld[0,0]
for y in range(im.size[1]):
for x in range(im.size[0]):
r, g, b = ld[x,y]
if abs(r - bg_r) <= 1 and abs(g - bg_g) <= 1 and abs(b - bg_b) <= 1:
ld[x,y] = (255, 255, 255)
else:
ld[x,y] = (0, 0, 0)
答案 2 :(得分:0)