Используя opencv с python, вот результат документа conture
Я использую opencv_python-4.2.0.34
, нижний левый угол не резкий, как другие углы. Как это исправить? (отредактируйте левый нижний угол автоматически, чтобы он выглядел резким, по мере появления других)
вот код для рисования контура:
img = cv2.imread(imagePath)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
invGamma = 1.0 / 0.3
table = np.array([((i / 255.0) ** invGamma) * 255
for i in np.arange(0, 256)]).astype("uint8")
# apply gamma correction using the lookup table
gray = cv2.LUT(gray, table)
ret, thresh1 = cv2.threshold(gray, 80, 255, cv2.THRESH_BINARY)
contours, hierachy = cv2.findContours(thresh1, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# except:
# print('exception occurred')
def biggestRectangle(conts):
biggest = None
max_area = 0
indexReturn = -1
for index in range(len(conts)):
i = conts[index]
area = cv2.contourArea(i)
if area > 100:
peri = cv2.arcLength(i, True)
approx = cv2.approxPolyDP(i, 0.1 * peri, True)
if area > max_area and len(approx) == 4:
biggest = approx
max_area = area
indexReturn = index
return indexReturn
indexReturn = biggestRectangle(contours)
hull = cv2.convexHull(contours[indexReturn])
print(indexReturn)
print(contours[indexReturn])
print(hull)
# copyImg = img.copy()
cv2.imwrite(os.path.join('path_to_save', imageName),
cv2.drawContours(img, [hull], 0, (0, 255, 0), 3))
Как сделать его правильным. Я пробовал использовать другой подход:
x, y, w, h = cv2.boundingRect(hull)
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
newImageName = imageName.split('.')
newImageName = newImageName[0] + '_rect.' + newImageName[1]
print(newImageName)
cv2.imwrite(os.path.join('path_to_save', newImageName), img)
, но он дает мне это (синий контур):
Что тоже неверно. Как это исправить?