从灰色矩形中寻找黑色斑点

2024-10-02 22:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图确定下图中的灰色矩形是否包含黑色斑点

Stain Image

Stain Highlighted

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代码,我能够创建一张只会使我想要定位的黑点变白的图片,如下所示

binary image

然而,我不知道如何进一步行动。 我的最终目标是从数千张图片中筛选出灰色矩形上只有黑色斑点的图片

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

Clean Rectangle

我在google上看到使用cv2.connectedComponentsWithStats函数的“stats”数组可能会有所帮助,但我完全不知道OpenCV库

任何建议都将不胜感激


Tags: pathimportimgbin图片pltcv2opencv
2条回答
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)

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

第1步:处理不均匀照明。计算某个内核大小的中位数(明显大于任何缺陷/碎片),然后减去它(或除以…但这更高级)

步骤2:设置“平面照明”图片的阈值,并查找轮廓(cv.findContours)。如有必要,按大小(cv.contourArea)筛选

enter image description here

相关问题 更多 >