OpenCV Python,去除阴影并获得轮廓

时间:2021-03-28 08:57:42

标签: python opencv

我需要从图像中获取圆圈的轮廓。但是有阴影渐变。(顶部亮,底部暗) 所以顶面背景的 GL 与底侧圆的 GL 相同。

我也有没有圆圈的背面图像,试试这个代码

import cv2
import matplotlib.pyplot as plt

src = './test.jpg'
img = cv2.imread(src, cv2.IMREAD_GRAYSCALE)
back_src = './back.jpg'
back = cv2.imread(back_src, cv2.IMREAD_GRAYSCALE)

diff_img = 255-cv2.absdiff(img, back)
cv2.normalize(diff_img, norm_img, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)

th, threshed = cv2.threshold(norm_img, 245, 255, cv2.THRESH_BINARY)

在此图像中,如果我将阈值设置为 245,则可以获得完美的二值图像。 但在真实图像(灰度)中,它们是嘈杂的,因此很难设置每个阈值。

我认为有更好的方法。请帮帮我....

test.jpg back.jpg

1 个答案:

答案 0 :(得分:0)

您可以为此使用自适应阈值:

gray = cv2.imread('/path/to/your/image/circles_0001.jpeg', cv2.COLOR_BGR2GRAY)

th = cv2.adaptiveThreshold(gray,255, cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY_INV,11,2)