有没有人可以help me写一段opencv-python轮廓提取的代码

主要是将图片中的针以及下面反射的影子轮廓提取出来。我自己简单的使用canny和简单的调用,不能把完整的轮廓提取出来。

img

最关键的地方就是针尖的轮廓要明显

你使用的光源改一下位置,现在背景和针有点混

完整代码


import cv2
import matplotlib.pyplot as plt
# 读取图像
frame = cv2.imread("针.jpg")
#图像颜色为银色
ball_color = 'silver'
#高斯模糊
gs_frame = cv2.GaussianBlur(frame, (5, 5), 0)
# BGR转换为HSV
hsv = cv2.cvtColor(gs_frame, cv2.COLOR_BGR2HSV)
#腐蚀
erode_hsv = cv2.erode(hsv, None, iterations=2)
#去除背景
inRange_hsv = cv2.inRange(erode_hsv, color_dist[ball_color]['Lower'], color_dist[ball_color]['Upper'])
#找出外边界
cnts = cv2.findContours(inRange_hsv.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
c = max(cnts, key=cv2.contourArea) 
rect = cv2.minAreaRect(c) 
box = cv2.boxPoints(rect) 
frame=cv2.drawContours(frame, [np.int0(box)], -1, (0, 255, 255), 2)
#显示图像
plt.imshow(frame)
plt.show()