【问题标题】:Detect dots in a image using image processing with python使用 python 进行图像处理来检测图像中的点
【发布时间】:2021-05-27 00:35:34
【问题描述】:

我需要识别给定图像中的以下点。但它没有给出正确的检测。有人可以提供一种方法来识别这样的图像中的这些点吗?

我对此做了一些改进,如下所示,

  • 增强图像,先膨胀再锐化

    我使用模板匹配来检测图像中的这些点。但效果并不好。代码如下。有没有其他方法可以检测到这些?

导入 cv2 将 numpy 导入为 np

img_rgb = cv2.imread(file)
cv2.imwrite("D:/4/Detect/"+str(i)+".0.jpg",img_rgb)
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

template = cv2.imread('a.jpg',0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.455
loc = np.where( res >= threshold)

for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,255,255), 0)

cv2.imshow('Detected',img_rgb)
cv2.imwrite("D:/4/Detect/"+str(i)+".1.jpg",img_rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()

【问题讨论】:

  • 感谢您的回复。我为此使用了模板加工,但效果不大。使用模板时,它也会检测一些不相关的部分。有没有其他方法可以检测到这些?

标签: python opencv image-processing computer-vision image-enhancement


【解决方案1】:

这是我快速开发的代码的主要部分以获得更好的结果(如下图所示):

import cv2 as cv
img = cv.imread('med.jpg',0)
th2 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_MEAN_C,\
            cv.THRESH_BINARY,11,2)
th3 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,\
            cv.THRESH_BINARY,11,2)
titles = ['Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
images = [th2, th3]
inv = ~th3
res = cv.bitwise_and(img,inv)
cv.imshow(titles[1],res)
cv.waitKey(0)
cv.imwrite("result.jpg",res)
cv.destroyAllWindows()

调整参数以获得所需的结果。

【讨论】:

  • 非常感谢SKG的回复。实际上,我使用了自适应阈值、精明、形态运算符等多种类型,但我只需要分割点。在上图中,它也将点与其他元素分割在一起。要求只有点。有什么办法吗?提前谢谢你
  • 从我的输出中,做 blob 分析。在那里,您将获得 blob 的所有统计信息(度量)。现在通过阈值处理,您可以保留所需的 blob 并拒绝不需要的 blob。
  • @vidu 如果你想分割每个点,你需要分割到像素级别,为此你可能需要使用 Mask R-CNN(实例分割)或 U-net(Semantinc细分)
  • 谢谢@Freddy。有没有什么方法可以在没有培训的情况下做到这一点...我的意思是一种基于规则的方法?
猜你喜欢
  • 2017-05-31
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
相关资源
最近更新 更多