查找图像的轮廓Python OpenCV
问题描述:
# import the necessary packages
import decimal
import imutils
import cv2
import numpy as np
import matplotlib.pyplot as plt
# load the image, convert it to grayscale, and blur it slightly
image = cv2.imread("hand.jpg",0)
# threshold the image, then perform a series of erosions +
# dilations to remove any small regions of noise
thresh = cv2.threshold(image, 45, 255, cv2.THRESH_BINARY)[1]
thresh = cv2.erode(thresh, None, iterations=2)
thresh = cv2.dilate(thresh, None, iterations=2)
# find contours in thresholded image, then grab the largest one
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]
c = max(cnts, key=cv2.contourArea)
size = len(c);
refer_point = (207,130)
data = np.genfromtxt("data.txt", delimiter=',')
X = data[:,][:,0]
Y = data[:,][:,1]
for i in range(0,size):
dist1= (((abs(207-X))**2)+((abs(130-Y))**2))**(1.0/2.0)
dist3 = round(dist1,2)
print dist3
plt.plot([dist3])
plt.show()
我正在研究上述代码。代码执行完美,但图像的轮廓点完全错误。绘制图后我观察到了这个错误。在这个问题上帮助我。查找图像的轮廓Python OpenCV
答
1)如果没有指定侵蚀和膨胀的内核,则图像不会改变。用内核尝试它们。
kernel = np.ones((3,3),np.uint8)
thresh = cv2.erode(thresh, kernel, iterations=1)
thresh = cv2.dilate(thresh, kernel, iterations=1)
2)cnts
包含上找到的轮廓的各点((X,Y)的元组)。 size
只是该轮廓上的点数。你获得它的大小并且不处理这些点,而是你读取一个数据文件并绘制完全不同的东西。要正确地看到轮廓,请尝试以下findContours后:
# Load the image in color
image = cv2.imread("hand.jpg",cv2.IMREAD_COLOR)
# Draw the contours
cv2.drawContours(image, cnts, -1, (0,255,0), 3)
# Show the image with the contours
cv2.imshow("contours",image)
然后尝试涉及您的数据文件与轮廓点。
什么是此代码段的输入图像和输出? – ZdaR
他们是图像,我不能在评论栏中添加任何图像。 –
然后上传它们并在这里提供链接 – ZdaR