gpt4 book ai didi

python - 使用 OpenCV 在对象周围绘制轮廓

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:43 25 4
gpt4 key购买 nike

我正在尝试在两个重叠的对象上绘制轮廓。在这里,我拍了两支笔的照片。但它不能完美地绘制轮廓。里面有一些小轮廓。如何删除它?

这是我的原图

enter image description here

和结果

enter image description here

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

img = cv2.imread('img/pen001.jpg',1)

img = cv2.cvtColor(img , cv2.COLOR_BGR2RGB)

imgray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

ret, thresh = cv2.threshold(imgray, 102 , 160, 0)

kernel = np.ones((5,5), np.float32)/10
dst = cv2.filter2D(thresh, -1, kernel)

contour1, hierarchy = cv2.findContours(dst, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img , contour1, -1, (0, 255, 0), 3 )
plt.imshow(dst)
plt.show()
plt.imshow(img)
plt.show()

最佳答案

这是获取轮廓的潜在方法

  • 将图像转换为灰度图像并模糊图像
  • 获取二值图像的阈值
  • 寻找轮廓
  • 遍历轮廓并使用最小轮廓区域进行过滤
  • 绘制轮廓

阈值图像

enter image description here

寻找轮廓

enter image description here

请注意,在此图像中,检测到笔内的小轮廓和纸上不需要的轮廓。你的问题是如何去除里面的小轮廓。有两种解决方案。一种是使用 cv2.RETR_EXTERNAL 而不是 cv2.RETR_TREE ,第二种是使用 cv2.contourArea() 按面积过滤掉小轮廓>。进行这些更改后,这是结果

enter image description here

import cv2

image = cv2.imread('1.jpg')
blur = cv2.medianBlur(image, 9)
gray = cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 110 ,255, cv2.THRESH_BINARY_INV)[1]

cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

min_area = 5000
for c in cnts:
area = cv2.contourArea(c)
if area > min_area:
cv2.drawContours(image,[c], 0, (36,255,12), 2)

cv2.imshow('thresh', thresh)
cv2.imshow('image', image)
cv2.waitKey(0)

关于python - 使用 OpenCV 在对象周围绘制轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56711662/

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