Нахождение крайних точек и нарисуйте линию при обнаружении крайних точек - PullRequest
0 голосов
/ 02 марта 2020

Как нарисовать вертикальную линию, когда обнаружена крайняя точка, и поставить некоторые измерения, например (дюймы, мм, см и т. Д. c):

enter image description here

Это результат кода: This is the result of the code

Приведенная ниже начальная точка должна рисовать крайнюю точку cv2.circle в drawContour, а не в cv2.rectangle:

The below start point must draw a cv2.circle extreme point in the drawContour not in the cv2.rectangle

import cv2
import numpy as np

# Load image, grayscale, Gaussian blur, threshold
image = cv2.imread('banana4.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blur, 220, 255, cv2.THRESH_BINARY_INV)[1]

# Find contours
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
c = max(cnts, key=cv2.contourArea)

# Obtain outer coordinates
left = tuple(c[c[:, :, 0].argmin()][0])
right = tuple(c[c[:, :, 0].argmax()][0])
top = tuple(c[c[:, :, 1].argmin()][0])
bottom = tuple(c[c[:, :, 1].argmax()][0])

# Draw dots onto image
cv2.drawContours(image, [c], -1, (36, 255, 12), 2)
cv2.circle(image, left, 8, (0, 50, 255), -1)
cv2.circle(image, right, 8, (0, 255, 255), -1)
cv2.circle(image, top, 8, (255, 50, 0), -1)
cv2.circle(image, bottom, 8, (255, 255, 0), -1)

print('left: {}'.format(left))
print('right: {}'.format(right))
print('top: {}'.format(top))
print('bottom: {}'.format(bottom))
cv2.imshow('thresh', thresh)
cv2.imshow('image', image)
cv2.waitKey()

1 Ответ

0 голосов
/ 03 марта 2020

У вас есть несколько вопросов и проблем здесь.

  1. Вы должны уменьшить минимальное значение для двоичного порога, чтобы избавиться от тени.

    thresh = cv2.threshold(blur, 180, 255, cv2.THRESH_BINARY_INV)[1]

  2. У вас уже есть ограничивающая рамка top / bottom / left / right, поэтому вы можете нарисовать прямоугольник, используя cv2.rectangle .

    cv2.Rectangle(image, (left[0], top[1]), (right[0], bottom[1]), (0, 255, 0), 2)

  3. Если вы не знаете никакой информации о камере или самом объекте, невозможно дать оценку о размере .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...