как обнаружить нерегулярные круги в python с помощью opencv - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу создать систему видения для обнаружения дефектов в конденсаторах SMD, дефект называется «крошечное отверстие», и они представляют собой небольшие отверстия на поверхности чипа, которые образуются во время конструирования. Моя цель состоит в том, чтобы создать алгоритм, способный обнаруживать эти дыры, и с этим отбросить чипы, имеющие этот дефект

. На данный момент я создал два кода:

  • Первый преобразует исходное изображение в двоичное изображение, чтобы я мог очистить круги, код и результат выглядит следующим образом. после получения изображения в двоичном виде, я не знаю, как заставить мой алгоритм обнаруживать, что есть круг, в соответствии с тем, что я исследовал с «ХОГ», его можно применять только к изображениям в оттенках серого

`

import cv2
import numpy as np
from matplotlib import pyplot as plt


img = cv2.imread("C:/Users/Johanna Menendez/Documents/UNIR/TFM/chips/20190905_124734.jpg", 0)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
newImg = cv2.resize(img, (0,0), fx=0.50, fy=0.50)
(thresh, blackAndWhiteImage) = cv2.threshold(newImg, 127, 255, cv2.THRESH_BINARY)
numpy_vertical_concat = np.concatenate((newImg, blackAndWhiteImage), axis=1)


cv2.imshow('binary', numpy_vertical_concat)

cv2.waitKey(0)

`

двоичный -Второй является обнаружение контуров, проблема в том, что он не только обнаруживает круги, а также после это я не знаю, как заставить мой алгоритм обнаружить, что это круг

import cv2

`

import numpy as np
from matplotlib import pyplot as plt


img = cv2.imread("C:/Users/Johanna Menendez/Documents/UNIR/TFM/chips/20190905_124734.jpg", 0)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
newImg = cv2.resize(img, (0,0), fx=0.50, fy=0.50)
gray = cv2.cvtColor(newImg, cv2.COLOR_RGB2GRAY)
(thresh, blackAndWhiteImage) = cv2.threshold(gray, 130, 255, cv2.THRESH_BINARY)
(contours, hierarchy) = cv2.findContours(blackAndWhiteImage, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
img = cv2.drawContours(newImg, contours, -1, (0, 255, 0), 2)
#numpy_vertical_concat = np.concatenate((newImg, img), axis=1)

cv2.imshow('binary', img)

cv2.waitKey(0)`

обнаружение контуров

Не могли бы вы помочь мне узнать, как мой алгоритм распознает круги?

...