На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Задача о поиске книг на картинке на Python с применением библиотеки OpenCV, Проблемы с апроксимацией и нахождением вершин фигуры
    Добрый день! Я - новичок в Python и начал изучать OpenCV по примерам на этом сайте:
    https://tproger.ru/translations/finding-books-python-opencv/
    Первые три примера благополучно создались, но с циклом поиска книг начались проблемы, которые связаны с функцией arclenght. Подскажите, пожалуйста, где на что нужно заменить. Это мой первый опыт, инструкции к библиотеке не читал, работаю в Anaconda 2019 и Python 3.7 через программу PyCharm Community (картинка лежит в одной папке с проектом), проверяю её работоспособность на этом примере:

    Исходный код:
    ExpandedWrap disabled
      # -*- coding: utf-8 -*-
      # импортируйте необходимые пакеты
      import numpy as np
      import cv2
       
      # загрузите изображение, смените цвет на оттенки серого и уменьшите резкость
      image = cv2.imread("1-3.jpg")
      gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
      gray = cv2.GaussianBlur(gray, (3, 3), 0)
      cv2.imwrite("gray.jpg", gray)
       
      # распознавание контуров
      edged = cv2.Canny(gray, 10, 250)
      cv2.imwrite("edged.jpg", edged)
       
      # создайте и примените закрытие
      kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
      closed = cv2.morphologyEx(edged, cv2.MORPH_CLOSE, kernel)
      cv2.imwrite("closed.jpg", closed)
       
      # найдите контуры в изображении и подсчитайте количество книг
      cnts = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]
      total = 0
       
      # цикл по контурам
      for c in cnts:
          # аппроксимируем (сглаживаем) контур
          peri = cv2.arcLength(c, True)
          approx = cv2.approxPolyDP(c, 0.02 * peri, True)
       
          # если у контура 4 вершины, предполагаем, что это книга
          if len(approx) == 4:
              cv2.drawContours(image, [approx], -1, (0, 255, 0), 4)
              total += 1
       
      # показываем результирующее изображение
      print("Я нашёл {0} книг на этой картинке".format(total))
      cv2.imwrite("output.jpg", image)


    Ошибки:
    ExpandedWrap disabled
      D:\Python\python.exe C:/untitled/opencv_demo1.py
      Traceback (most recent call last):
        File "C:/untitled/opencv_demo1.py", line 28, in <module>
          peri = cv2.arcLength(c, True)
      cv2.error: OpenCV(4.1.2) D:\Build\OpenCV\opencv-4.1.2\modules\imgproc\src\shapedescr.cpp:239: error: (-215:Assertion failed) count >= 0 && (depth == CV_32F || depth == CV_32S) in function 'cv::arcLength'
       
       
      Process finished with exit code 1


    Почему через runfile в web-интерфейсе Jupyter Notebook ничего не получилось? Я пробовал

    ExpandedWrap disabled
      runfile("C:/untitled/opencv_demo1.py", wdir="C:/untitled")


    Компилятор выдал, что эта функция не определена.

    ExpandedWrap disabled
      NameError Traceback (most recent call last)
      <ipython-input-3-3b5b44b0deb8> in <module>
      ----> 1 runfile("C:/untitled2/calculator.py", wdir="C:/untitled2")
       
      NameError: name 'runfile' is not defined
    2 пользователей читают эту тему (2 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,3532 ]   [ 16 queries used ]   [ Generated: 3.04.20, 10:52 GMT ]