首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opencv中基于MSER的灰度图像白斑检测

opencv中基于MSER的灰度图像白斑检测
EN

Stack Overflow用户
提问于 2019-09-03 16:07:42
回答 1查看 840关注 0票数 3

我的图像大部分是黑色的,上面有很少的白色斑点。我想将这些图像与那些没有这样的斑点的图像区分开来。

我尝试了MSER,并调整了它的参数,以便在大多数有斑点的图像中正确检测斑点,在没有斑点的图像中返回0结果。

下面是我的MSER参数配置。

代码语言:javascript
复制
mser = cv2.MSER_create(_delta = 3,_min_diversity=0.2,_edge_blur_size = 5 ,_max_variation = 0.10,_min_area = 120,_max_area = 1000)

下面是一张测试图片:

未检测到顶部的白色区域。

EN

回答 1

Stack Overflow用户

发布于 2019-09-04 05:43:19

与使用MSER相比,这里有两种更简单的方法

方法#1

将图像转换为灰度和Otsu阈值,得到二值图像。然后找到轮廓并使用最小阈值区域进行过滤。根据要检测的白色斑点数量,可以调整此阈值区域。以下是检测到的白色区域以绿色突出显示的结果

代码语言:javascript
复制
import cv2

image = cv2.imread('1.png')
original = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

cnts = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
    area = cv2.contourArea(c)
    if area > 50:
        cv2.drawContours(original, [c], -1, (36, 255, 12), -1)

cv2.imshow('thresh', thresh)
cv2.imshow('original', original)
cv2.imwrite('original.png', original)
cv2.waitKey()

方法#2

由于OpenCV图像被存储为Numpy数组,我们可以简单地使用切片来创建大于某个阈值的像素掩码。以下是结果

代码语言:javascript
复制
import cv2

image = cv2.imread('1.png')
mask = (image >= [150.,150.,150.]).all(axis=2)
image[mask] = [36, 255, 12]

cv2.imshow('image', image)
cv2.waitKey()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57767518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档