[英]How can I get the required ROI in the below image using OpenCV (Python)?
所以,我正在努力寻找可以在图像中看到的电子芯片上的小组件。 到目前为止,我一直在努力寻找轮廓,然后应用形态学操作并绘制矩形。 我附上了原始的、必需的和实现的图像以及代码,以便社区可以轻松理解问题。
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()
任何帮助将不胜感激。 谢谢
模板匹配可能已经足够了。 只需将 ROI 作为模板图像试一试。 您可以改变分数以获得倾斜的元素。
看看这里: https : //docs.opencv.org/master/d4/dc6/tutorial_py_template_matching.html
我认为你可以使用 matchTemplate,但是当你使用这个函数时,你会得到不止一个类似的点,
例如,您的图像有三个对象,第一个对象有多个相似点,这取决于您的阈值,您需要消除它。
根据我的经验,我使用目标图像的一半大小作为边界距离,对结果点进行排序,然后假设第一个点是最佳点,然后消除最佳点附近边界距离内的相似点。 下一个点将是您的第二个对象的点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.