Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python和openCV合并同一对象的轮廓?_Python_Algorithm_Opencv - Fatal编程技术网

如何使用Python和openCV合并同一对象的轮廓?

如何使用Python和openCV合并同一对象的轮廓?,python,algorithm,opencv,Python,Algorithm,Opencv,我使用了名为cv2.findContours()的函数来绘制轮廓,但是有些地方无法识别,这使得轮廓不连续。这是我的代码和结果。 非常感谢如果有人能教我如何合并同一物体的轮廓 import numpy as np import os import cv2 image = cv2.imread("/home/rafael/Desktop/2.jpg") hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) lower = np.array([50, 10, 10

我使用了名为cv2.findContours()的函数来绘制轮廓,但是有些地方无法识别,这使得轮廓不连续。这是我的代码和结果。 非常感谢如果有人能教我如何合并同一物体的轮廓

import numpy as np
import os
import cv2

image = cv2.imread("/home/rafael/Desktop/2.jpg")
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([50, 10, 10])
upper = np.array([120, 255, 255])
mask = cv2.inRange(hsv, lower, upper)
res = cv2.bitwise_and(image, image, mask = mask)
kernel = np.ones((5, 5), np.uint8)
d_im = cv2.dilate(mask, kernel, iterations = 1)
e_im = cv2.erode(d_im, kernel, iterations = 1)
src, contours, hierarchy = cv2.findContours(e_im, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
temp = []
tmp = []
num = 0
for i in range(len(contours)):
    if len(contours[i]) < 35:
        temp.append(i)
for i in temp:
    del contours[i - num]
    num = num + 1
cv2.drawContours(image, contours, -1, (0, 0, 255), 2)
cv2.imwrite('/home/rafael/Desktop/13.jpg', image)
将numpy导入为np
导入操作系统
进口cv2
image=cv2.imread(“/home/rafael/Desktop/2.jpg”)
hsv=cv2.cvt颜色(图像,cv2.COLOR\u BGR2HSV)
lower=np.数组([50,10,10])
upper=np.array([120255255])
遮罩=cv2.inRange(hsv,下部,上部)
res=cv2.按位_和(图像,图像,掩码=掩码)
内核=np.one((5,5),np.uint8)
d_im=cv2.deflate(掩码、内核、迭代次数=1)
e_im=cv2.腐蚀(d_im,内核,迭代次数=1)
src、等高线、层次=cv2.找到的轮廓(e_im、cv2.RETR_外部、cv2.链约无)
温度=[]
tmp=[]
num=0
对于范围内的i(透镜(轮廓)):
如果len(等高线[i])<35:
临时附加(i)
对于临时工:
del等高线[i-num]
num=num+1
cv2.绘制等高线(图像,等高线,-1,(0,0,255),2)
imwrite('/home/rafael/Desktop/13.jpg',image)
结果

全貌


在查找对象之前,请检查您的过程中,图像是否包含完整对象。使用形态学操作时,您可能会遗漏对象中的某些部分。如果您真的希望有人仔细查看您的问题,您可能需要附加实际的输入图像:)@HowardGENG我已附加了完整图像,谢谢您的建议。如果您事先增加对比度,也许可以?还是应用阈值?@Gowthaman是的,你是对的,事实上我发现当我将原始图像更改为二值图像时,某些部分丢失了,但是更改阈值可能无助于解决问题,那么你能告诉我如何检查和解决它吗?