<div>
<p></p>
<div style="text-align:center;">
<img alt="v2-729e51a4b593564309fc535c7a29f06b_1440w.jpg?source=172ae18b" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-fbca069fff784e6bd9dd2025fac2192f">
</div>
<p></p>
<div style="text-align:center;">
<img alt="v2-4140c70143d365bcc561fee07bf7740a_b.jpg" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-6db71e018bed39b02811c1c1ec644663.jpg">
</div>
<blockquote>
本文为 AI 研习社编译的技术博客,原标题 :
<br>Object detection via color-based image segmentation using python
<br>作者 |
<i> Salma Ghoneim</i>
<br>翻译 | Mr丶Lonely
<br>校对 | 酱番梨 审核 | 约翰逊·李加薪 整理 | 立鱼王
<br>原文链接:
https://
towardsdatascience.com/
object-detection-via-color-based-image-segmentation-using-python-e9b7c72f0e11
</blockquote>
<p></p>
<div style="text-align:center;">
<img alt="v2-09ae4cb31afcee18ec59e932dd05b348_b.jpg" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-eed5d2d6908075e34a34270654f2415f.jpg">
</div>
<figcaption>
图片来自pexels
</figcaption>
<h2><b>入门</b></h2>
<p>如果你已经安装了jupyter notebook或者一个IDE,你可以运行python然后下载OpenCV,只需要跳到执行即可。</p>
<p><b>工具</b></p>
<p>我们今天的英雄是Anaconda。一个免费开源的发行版,帮助我们下载不同的软件包并且将它们整理到独立的环境之中。</p>
<p>维基百科告诉我们关于Anaconda的内容:</p>
<p><i>Anaconda是用于科学计算(数据科学,机器学习应用程序,大规模数据处理,预测分析等)的Python和R编程语言的免费开源发行版,旨在简化包管理和部署。包版本由包管理系统conda管理。Anaconda发行版已被超过1200万用户使用,包括1400多种适用于Windows,Linux和MacOS的流行数据科学包。</i></p>
<p>以下是有关如何下载Anaconda的详细教程:<br>适用于Windows的Anaconda和适用于Linux的Anaconda<u>https://docs.anaconda.com/anaconda/install/windows/</u><u>https://docs.anaconda.com/anaconda/install/linux/</u></p>
<p><b>创建环境</b></p>
<p>打开bash(cmd)并输入</p>
<div class="blockcode">
<pre class="blockcode"><code>$ conda create -n myEnv python=3</code></pre>
</div>
<p>提示下载软件包时选择y(表示是)。 </p>
<p>这将在浏览器中为您打开jupyter notebook。 </p>
<div class="blockcode">
<pre class="blockcode"><code>$ source activate myEnv
$ conda install anaconda
$ conda activate myEnv
$ conda install opencv
$ jupyter notebook</code></pre>
</div>
<h2><b>一些重要的术语</b></h2>
<p><b>轮廓</b></p>
<p>轮廓可以简单地解释为连接所有连续点(连同边界)的曲线,具有相同的颜色或亮度。轮廓是形状分析和目标检测和识别的有用工具。 </p>
<p><b>阈值 </b></p>
<p>在灰度图像上应用阈值处理使其成为二值图像。你可以设置一个阈值,其中低于此阈值的所有值都将变为黑色,高于此阈值的所有值都将变为白色。 </p>
<h2><b>执行</b></h2>
<p>现在你已经有了所有你需要的东西。</p>
<p>我们将从一个简单的例子开始,向你展示基于颜色的分割是如何工作的。 </p>
<p>忍受我一下,直到我们得到好的东西.</p>
<p></p>
<div style="text-align:center;">
<img alt="v2-66dd44c1b06d67ababe2aac445dfaaaa_b.jpg" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-9c6e29233a5548662e3702ccbcfb947d.jpg">
</div>
<figcaption>
一个Ombre圈 - 使用photoshop制作的图像
</figcaption>
<p>如果你想和我一起尝试,你可以从原文免费获得这个图像。</p>
<p>在下面的代码中,我将把这个图像分成17个灰度级。然后使用轮廓测量每个级别的区域。</p>
<div class="blockcode">
<pre class="blockcode"><code>import cv2
import numpy as np
def viewImage(image):
cv2.namedWindow('Display', cv2.WINDOW_NORMAL)
cv2.imshow('Display', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
def grayscale_17_levels (image):
high = 255
while(1):
low = high - 15
col_to_be_changed_low = np.array([low])
col_to_be_changed_high = np.array([high])
curr_mask = cv2.inRange(gray, col_to_be_changed_low,col_to_be_changed_high)
gray[curr_mask > 0] = (high)
high -= 15
if(low == 0 ):
break
image = cv2.imread('./path/to/image')
viewImage(image)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
grayscale_17_levels(gray)
viewImage(gray)</code></pre>
</div>
<p></p>
<div style="text-align:center;">
<img alt="v2-02e4450b5f79d352744444725ef416df_b.jpg" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-baa45081e7047051bbe2e277a124aee3.jpg">
</div>
<figcaption>
相同的图像分为17个灰度级
</figcaption>
<div class="blockcode">
<pre class="blockcode"><code>def get_area_of_each_gray_level(im):
## convert image to gray scale (must br done before contouring)
image = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY |
|