繁体   English   中英

如何使用 OpenCV (Python) 在下图中获得所需的 ROI?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM