opencv中文文档

opencv中文文档


改变颜色空间

<h1>目标</h1> <ul> <li>在本教程中,您将学习如何将图像从一个色彩空间到另一个极端,像BGR↔灰色,BGR↔HSV等等。</li> <li>除此之外,我们还将创建一个应用程序来提取视频中的彩色对象</li> <li>您将学习以下函数:cv.cvtColor()、cv.inRange()等。</li> </ul> <h2>改变颜色空间</h2> <p>OpenCV中有150多种颜色空间转换方法。但是我们将研究只有两个最广泛使用的,BGR↔灰色和BGR↔HSV。</p> <p>对于颜色转换,我们使用函数cv.cvtColor(input_image, flag),其中flag决定转换的类型。</p> <p>对于BGR→灰度转换,我们使用标志cv.COLOR_BGR2GRAY。类似地,对于BGR→HSV,我们使用标志cv.COLOR_BGR2HSV。要获取其他标志,只需在Python终端中运行以下命令:</p> <pre><code class="language-python">&gt;&gt;&gt; import cv2 as cv &gt;&gt;&gt; flags = [i for i in dir(cv) if i.startswith('COLOR_')] &gt;&gt;&gt; print( flags )</code></pre> <h4>注意</h4> <pre><code>HSV色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。不同的软件使用不同的规模。因此,如果要比较OpenCV值和它们,需要对这些范围进行标准化。</code></pre> <h2>对象跟踪</h2> <p>现在我们知道了如何将BGR图像转换为HSV,我们可以使用它来提取一个彩色对象。在HSV中,表示颜色比在BGR颜色空间中更容易。在我们的应用程序中,我们将尝试提取一个蓝色的对象。方法如下:</p> <ul> <li>取视频的每一帧</li> <li>从BGR转换到HSV颜色空间</li> <li>我们对HSV图像设置一个蓝色范围的阈值</li> <li>现在只提取蓝色对象,我们可以对图像做任何我们想做的事情。</li> </ul> <p>以下是详细注释的代码:</p> <pre><code class="language-python">import cv2 as cv import numpy as np cap = cv.VideoCapture(0) while(1): # Take each frame _, frame = cap.read() # Convert BGR to HSV hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV) # define range of blue color in HSV lower_blue = np.array([110,50,50]) upper_blue = np.array([130,255,255]) # Threshold the HSV image to get only blue colors mask = cv.inRange(hsv, lower_blue, upper_blue) # Bitwise-AND mask and original image res = cv.bitwise_and(frame,frame, mask= mask) cv.imshow('frame',frame) cv.imshow('mask',mask) cv.imshow('res',res) k = cv.waitKey(5) &amp; 0xFF if k == 27: break cv.destroyAllWindows()</code></pre> <p>下图显示了蓝色物体的轨迹:</p> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/f1eef6edeefce3bdfa238e6ebdd9aea0?showdoc=.jpg" alt="" /></p> <h4>注意</h4> <pre><code>图像中有一些噪音。我们将在后面的章节中看到如何删除它们。 这是跟踪目标最简单的方法。一旦你学会了轮廓的函数,你就可以做很多事情,比如找到这个物体的质心,用它来跟踪物体,仅仅通过在相机前移动你的手来画图表,以及其他有趣的事情。</code></pre> <h2>如何查找要跟踪的HSV值?</h2> <p>这是在stackoverflow.com上发现的一个常见问题。它非常简单,您可以使用相同的函数cv.cvtColor()。您只需传递所需的BGR值,而不是传递图像。例如,要查找绿色的HSV值,请在Python终端中尝试以下命令:</p> <pre><code class="language-python">&gt;&gt;&gt; green = np.uint8([[[0,255,0 ]]]) &gt;&gt;&gt; hsv_green = cv.cvtColor(green,cv.COLOR_BGR2HSV) &gt;&gt;&gt; print( hsv_green ) [[[ 60 255 255]]]</code></pre> <p>现在将[H- 10,100,100]和[H+ 10,255, 255]分别作为下界和上界。除了这个方法,您可以使用任何图像编辑工具(如GIMP)或任何在线转换器来查找这些值,但不要忘记调整HSV范围。</p> <h1>练习</h1> <p>尝试找到一种方法来提取不止一种颜色的对象,例如,同时提取红色、蓝色和绿色对象。</p>

页面列表

ITEM_HTML