Строительные контуры из очков OpenCVPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Строительные контуры из очков OpenCV

Сообщение Anonymous »

Со следующим вводом теста: test.png :

и мой код:

Код: Выделить всё

import cv2
import numpy as np
# import matplotlib.pyplot as plt

import imutils
print("Your OpenCV version: {}".format(cv2.__version__))
print("Are you using OpenCV 2.X? {}".format(imutils.is_cv2()))
print("Are you using OpenCV 3.X? {}".format(imutils.is_cv3()))
print("Are you using OpenCV 4.X? {}".format(imutils.is_cv4()))

image_path = 'test.png'

image = cv2.imread(image_path)

cv2.imshow('input',  image)
cv2.waitKey(0)

gray_image = cv2.cvtColor(image.copy(), cv2.COLOR_BGR2GRAY)
gray_image = cv2.GaussianBlur(gray_image, (5, 5), 0)
cv2.imshow('gray_image',  gray_image)
cv2.waitKey(0)

image_edged = cv2.Canny(gray_image, 50, 100)
cv2.imshow('image_edged', image_edged)
cv2.waitKey(0)
print('image_edged.shape : ', image_edged.shape)

cnts = cv2.findContours(image_edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

cnts = cnts[1] if imutils.is_cv2() else cnts[0] #### #### STO USANDO CV4 --→ https://stackoverflow.com/questions/57980005/having-the-following-error-message-error-215assertion-failed-npoints-0
cntso = sorted(cnts, key=cv2.contourArea, reverse=True)

for n,i in enumerate(cntso) :

print(n, '   ---> ', cv2.contourArea(i),'...........', type(i),   i.shape, i.ndim,)

#from 6. Mask and Pixel Points https://docs.opencv.org/4.x/d1/d32/tutorial_py_contour_properties.html
# mask = np.zeros(image_edged.shape,np.uint8)
mask = np.zeros(gray_image.shape)
cv2.drawContours(mask, [i], -1 , 255 , 1)
# pixelpoints = np.transpose(np.nonzero(mask))
pixelpoints = cv2.findNonZero(mask)

# print('pixelpoints : ', pixelpoints)
# print('pixelpoints : ', type(pixelpoints), pixelpoints.shape,)

# print('\n\n\n pixelpoints[:,0,0] : ', pixelpoints[: ,0,0])
# print('\n\n\n pixelpoints[:,0,1] : ', pixelpoints[: ,0,1])
coordinates = list(zip(pixelpoints[: ,0,0], pixelpoints[: ,0,1]))
# print('coordinates : ', coordinates, '\n\nlenght : ', len(coordinates))
print('coordinates lenght : ', len(coordinates))
cv2.drawContours(mask, [pixelpoints] , -1, 255, 1) ## TypeError: contours is not a numpy array, neither a scalar

cv2.imshow('mask', mask)
cv2.waitKey(0)

image_copy = image.copy()
cv2.drawContours(image_copy, [pixelpoints] , -1, (0,0,255), 1) ##pixelpoints is not a contour is just a series of pixels

cv2.imshow('image_copy', image_copy)
cv2.waitKey(0)

# print('\n\n\n i[:,0,0] : ', i[: ,0,0])
# print('\n\n\n i[:,0,1] : ', i[: ,0,1])
coordinates = list(zip(i[:,0,0], i [:,0,1]))
# print('coordinates : ', coordinates, '\n\nlenght : ', len(coordinates))
print('coordinates lenght : ', len(coordinates))

print('---')

if cv2.contourArea(i) > 400:

# print(n, '   ---> ', cv2.contourArea(i) )
# cv2.drawContours(image, [i] , -1, (0,255,255), cv2.FILLED)
cv2.drawContours(image, [i] , -1, (0,255,0), 3)
cv2.putText(image, "{}".format(n), (int(i[0][0][0]), int(i[0][0][1])), cv2.FONT_HERSHEY_SIMPLEX, 0.65, (255, 255, 255), 2)

else:
cv2.drawContours(image, [i] , -1, (0,0,255), cv2.FILLED)
cv2.putText(image, "{}".format(n), (int(i[0][0][0]), int(i[0][0][1])), cv2.FONT_HERSHEY_SIMPLEX, 0.65, (255, 255, 255), 2)

cv2.imshow('image', image)
cv2.waitKey(0)

cv2.destroyAllWindows()
< /code>
Я пытаюсь получить найденные точки контуров, используя подход 6. Маска и пиксель
или только < /p>
(cnt[: ,0,0] , cnt[: ,0,1])
подход.
Что я бы попытался достичь, - это визуально проверить пути,
Но то, что мне снова не хватает, - это то, как строить контуры из точек?

Код: Выделить всё

cv2.drawContours(image_copy, [pixelpoints] , -1, (0,0,255), 1)
к моему изображению, что [pixelpoints] не является контуром, а является просто списком координат пикселей, но по какой -то странной причине команда просто нарисует контур Right (??) только на моей картинке, которая заполняет его, независимо от того, какая толщина Ключевое слово, которое я использую (здесь 1). Любая рутина/код для воссоздания контура из списка координат пикселей? DrawContours
и окончательный правильный вывод:


Подробнее здесь: https://stackoverflow.com/questions/796 ... nts-opencv
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Строительные контуры из очков OpenCV
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Строительные контуры из очков OpenCV
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Строительные контуры из очков OpenCV
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Cv2.error: OpenCV(4.8.1) D:\a\opencv-python\opencv-python\opencv\modules\src\.cpp:660: ошибка: (-215: утверждение не вып
    Anonymous » » в форуме Python
    0 Ответы
    131 Просмотры
    Последнее сообщение Anonymous
  • Приложение Compose отраслевого уровня, навигация и строительные леса
    Anonymous » » в форуме Android
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»