我已经编写了将轮廓绘制到图像上的代码。我已经成功完成了这一部分。现在,我进一步想删掉那一部分。
在这里,问题是我的轮廓(检测到的对象)是一个倾斜的矩形。我知道如何使用以下方法切出直线矩形:
frame[200:300, 200:300] # Where frame is the image
但是,就我而言,这行不通。
因此,总而言之,我的代码生成了一个倾斜的矩形(您可以在下图中看到),我想将其切出并保存(如果可能,最好将其拉直)。
到目前为止,我的代码是用openCV-2
用python-3
编写的,并且我的机器是基于Linux的机器(Ubuntu-16.04
)
我在下面提供了我的代码(以防万一,有人想重现这种情况,然后尝试解决问题)。
import cv2
import numpy as np
im = cv2.imread('Maze6.png')
gaus = cv2.GaussianBlur(im, (5, 5), 1)
#mask1 = cv2.dilate(gaus, np.ones((15, 15), np.uint8, 3))
mask2 = cv2.erode(gaus, np.ones((5, 5), np.uint8, 1))
imgray = cv2.cvtColor(mask2, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
maxArea1=0
maxI1=0
for i in range(len(contours)):
area = cv2.contourArea(contours[i])
epsilon = cv2.arcLength(contours[i], True)
approx = cv2.approxPolyDP(contours[i], epsilon, True)
if area > maxArea1 :
maxArea1 = area
print(maxArea1)
print(maxI1)
cv2.drawContours(im, contours, maxI1, (0,0,255), 3)
cv2.imshow("yay",im)
cv2.imshow("gray",imgray)
cv2.waitKey(0)
cv2.destroyAllWindows()
在Stack Overflow或任何文档中,我还没有找到解决方案。如果您发现了一些东西,那么链接也会很有帮助。感谢所有帮助!