首页 > 解决方案 > OpenCV Python,去除阴影并获得轮廓

问题描述

我需要从图像中获取圆圈的轮廓。但是有一个阴影渐变。(顶部是亮的,底部是暗的)所以顶部背​​景的 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,我可以获得完美的二值图像。但在真实图像(灰度)中,它们很嘈杂,因此很难设置每个阈值。

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

测试 .jpg 返回.jpg

标签: pythonopencv

解决方案


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

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)

推荐阅读