<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416600&amp;view=findpost&amp;p=3819519</guid>
        <pubDate>Wed, 29 Jan 2020 02:55:15 +0000</pubDate>
        <title>Задача о поиске книг на картинке на Python с применением библиотеки OpenCV</title>
        <link>https://forum.sources.ru/index.php?showtopic=416600&amp;view=findpost&amp;p=3819519</link>
        <description><![CDATA[iVovan1996: Добрый день&#33; Я - новичок в Python и начал изучать OpenCV по примерам на этом сайте:<br>
<a class='tag-url' href='https://tproger.ru/translations/finding-books-python-opencv/' target='_blank'>https://tproger.ru/translations/finding-books-python-opencv/</a><br>
Первые три примера благополучно создались, но с циклом поиска книг начались проблемы, которые связаны с функцией arclenght. Подскажите, пожалуйста, где на что нужно заменить. Это мой первый опыт, инструкции к библиотеке не читал, работаю в Anaconda 2019 и Python 3.7 через программу PyCharm Community (картинка лежит в одной папке с проектом), проверяю её работоспособность на этом примере:<br>
<br>
Исходный код:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line"># -*- coding: utf-8 -*-</div><div class="code_line"># импортируйте необходимые пакеты</div><div class="code_line">import numpy as np</div><div class="code_line">import cv2</div><div class="code_line">&nbsp;</div><div class="code_line"># загрузите изображение, смените цвет на оттенки серого и уменьшите резкость</div><div class="code_line">image = cv2.imread(&quot;1-3.jpg&quot;)</div><div class="code_line">gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)</div><div class="code_line">gray = cv2.GaussianBlur(gray, (3, 3), 0)</div><div class="code_line">cv2.imwrite(&quot;gray.jpg&quot;, gray)</div><div class="code_line">&nbsp;</div><div class="code_line"># распознавание контуров</div><div class="code_line">edged = cv2.Canny(gray, 10, 250)</div><div class="code_line">cv2.imwrite(&quot;edged.jpg&quot;, edged)</div><div class="code_line">&nbsp;</div><div class="code_line"># создайте и примените закрытие</div><div class="code_line">kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))</div><div class="code_line">closed = cv2.morphologyEx(edged, cv2.MORPH_CLOSE, kernel)</div><div class="code_line">cv2.imwrite(&quot;closed.jpg&quot;, closed)</div><div class="code_line">&nbsp;</div><div class="code_line"># найдите контуры в изображении и подсчитайте количество книг</div><div class="code_line">cnts = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]</div><div class="code_line">total = 0</div><div class="code_line">&nbsp;</div><div class="code_line"># цикл по контурам</div><div class="code_line">for c in cnts:</div><div class="code_line">&nbsp;&nbsp; &nbsp;# аппроксимируем (сглаживаем) контур</div><div class="code_line">&nbsp;&nbsp; &nbsp;peri = cv2.arcLength(c, True)</div><div class="code_line">&nbsp;&nbsp; &nbsp;approx = cv2.approxPolyDP(c, 0.02 * peri, True)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;# если у контура 4 вершины, предполагаем, что это книга</div><div class="code_line">&nbsp;&nbsp; &nbsp;if len(approx) == 4:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cv2.drawContours(image, [approx], -1, (0, 255, 0), 4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;total += 1</div><div class="code_line">&nbsp;</div><div class="code_line"># показываем результирующее изображение</div><div class="code_line">print(&quot;Я нашёл {0} книг на этой картинке&quot;.format(total))</div><div class="code_line">cv2.imwrite(&quot;output.jpg&quot;, image)</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Ошибки:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">D:\Python\python.exe C:/untitled/opencv_demo1.py</div><div class="code_line">Traceback (most recent call last):</div><div class="code_line">&nbsp;&nbsp;File &quot;C:/untitled/opencv_demo1.py&quot;, line 28, in &#60;module&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;peri = cv2.arcLength(c, True)</div><div class="code_line">cv2.error: OpenCV(4.1.2) D:\Build\OpenCV\opencv-4.1.2\modules\imgproc\src\shapedescr.cpp:239: error: (-215:Assertion failed) count &#62;= 0 &amp;&amp; (depth == CV_32F || depth == CV_32S) in function &#39;cv::arcLength&#39;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">Process finished with exit code 1</div></ol></div></div></div></div><br>
<br>
Почему через runfile в web-интерфейсе Jupyter Notebook ничего не получилось? Я пробовал<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">runfile(&quot;C:/untitled/opencv_demo1.py&quot;, wdir=&quot;C:/untitled&quot;)</div></ol></div></div></div></div><br>
<br>
Компилятор выдал, что эта функция не определена.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">NameError Traceback (most recent call last) </div><div class="code_line">&#60;ipython-input-3-3b5b44b0deb8&#62; in &#60;module&#62; </div><div class="code_line">----&#62; 1 runfile(&quot;C:/untitled2/calculator.py&quot;, wdir=&quot;C:/untitled2&quot;) </div><div class="code_line">&nbsp;</div><div class="code_line">NameError: name &#39;runfile&#39; is not defined</div></ol></div></div></div></div>]]></description>
        <author>iVovan1996</author>
        <category>Программирование графики</category>
      </item>
	
      </channel>
      </rss>
	