0

我正在尝试确定下图中的灰色矩形是否包含黑色污点。

染色图像

染色突出显示

import numpy 
import matplotlib.pyplot as plt
import cv2

path = r'F:\stain.tif'
img = cv2.imread(path)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_bin = cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                   cv2.THRESH_BINARY_INV, 131, 15)

plt.imshow(img_bin, cmap='gray')
plt.show()

使用上面的 OpenCV 代码,我能够创建一张只使我想要定位的黑点变白的图片,如下所示。

二值图像

但是,我不确定如何进一步移动。我的最终目标是从数千张图片中挑选出只有灰色矩形上有黑色污点的图片。

下面是不应排序的干净灰色矩形图像的示例。

干净的矩形

我在谷歌上看到使用“stats”cv2.connectedComponentsWithStats函数数组可能会有所帮助,但我完全不了解 OpenCV 库。

任何建议将不胜感激!

4

2 回答 2

1

步骤0:找到八边形,这样你就知道里面是什么,外面是什么,八边形的边缘不会打扰你。

第一步:处理光照不均。计算一些内核大小的中值(明显大于任何缺陷/碎片),然后减去它(或除以......但这更高级)。

步骤 2:阈值“平面照明”图片并找到轮廓 ( cv.findContours)。cv.contourArea如有必要,按大小 ( )过滤。

在此处输入图像描述

于 2021-09-03T10:33:38.810 回答
0
grayImg[np.where(grayImg > 20)] = 255
cnts, _ = cv2.findContours(~grayImg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in cnts:
    x, y, w, h = cv2.boundingRect(c)
    cv2.circle(grayImg, (x+w//2, y+h//2), max(w, h), 127, 5)
print("Found any: ", len(cnts) > 0)
于 2021-09-03T06:01:21.593 回答