所以,我正在努力尋找可以在影像中看到的電子芯片上的小組件。到目前為止,我一直在努力尋找輪廓,然后應用形態學操作并繪制矩形。我附上了原始的、必需的和實作的影像以及代碼,以便社區可以輕松理解問題。
原圖
import cv2
import os
# Load iamge, grayscale, adaptive threshold
image = cv2.imread('4.jpg')
result = image.copy()
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY_INV,51,9)
# Fill rectangular contours
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
cv2.drawContours(thresh, [c], -1, (255,255,255), -1)
# Morph opend
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9,9))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=4)
# Draw rectangles
cnts = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(image, (x, y), (x w, y h), (36,255,12), 3)
cv2.imshow('thresh', thresh)
cv2.imshow('opening', opening)
cv2.imshow('image', image)
cv2.waitKey()
至今取得的成果
這是我想要達到的結果
任何幫助將不勝感激。謝謝
uj5u.com熱心網友回復:
模板匹配可能已經足夠了。只需將 ROI 作為模板影像試一試。您可以改變分數以獲得傾斜的元素。
看看這里:https : //docs.opencv.org/master/d4/dc6/tutorial_py_template_matching.html
uj5u.com熱心網友回復:
我認為你可以使用matchTemplate,但是當你使用這個函式時,你會得到不止一個類似的點,
例如,您的影像有三個物件,第一個物件有多個相似點,這取決于您的閾值,您需要消除它。
根據我的經驗,我使用目標影像的一半大小作為邊界距離,對結果點進行排序,然后假設第一個點是最佳點,然后消除最佳點附近邊界距離內的相似點。下一個點將是您的第二個物件的點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/313195.html
標籤:Python 蟒蛇-3.x opencv opencv-contour 图像阈值处理
