gpt4 book ai didi

opencv - 从图像中提取对象

转载 作者:行者123 更新时间:2023-12-02 17:31:34 26 4
gpt4 key购买 nike

我已经使用inRange函数删除了图像中两个对象之外的所有组件。有什么方法可以从图像中单独提取对象?我尝试使用HoughCircle,但结果非常不一致。

无inRange功能(原图)

使用HoughCircle
With HoughCircle

最佳答案

cv::findContours在这里似乎很合适:

img = cv.imread('images/suawk.png')

search = cv.dilate(img, cv.getStructuringElement(cv.MORPH_RECT, (5,5)))
search = cv.cvtColor(search, cv.COLOR_BGR2GRAY)
contours, _ = cv.findContours(search, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
bboxes = [cv.boundingRect(c) for c in contours]

fig, axes = plt.subplots(1, sum(rect[2]*rect[3] > 250 for rect in bboxes))
fig.set_size_inches([12,3])
fig.tight_layout()
figi = 0
for i in range(len(contours)):
rect = cv.boundingRect(contours[i])
area = rect[2] * rect[3]
if area < 250:
continue

obj = img[rect[1]:rect[1]+rect[3]+1, rect[0]:rect[0]+rect[2]+1, :]
obj = cv.cvtColor(obj, cv.COLOR_BGR2RGB)
axes[figi].imshow(obj)
figi += 1

fig.show()

objects

我在findContours之前进行了一次膨胀,这样可以减少碎片的轮廓。我丢弃了所有边界框小于250px的轮廓,以减少噪点。

关于opencv - 从图像中提取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55369501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com