<tfoot id='FRwsF'></tfoot>
<i id='FRwsF'><tr id='FRwsF'><dt id='FRwsF'><q id='FRwsF'><span id='FRwsF'><b id='FRwsF'><form id='FRwsF'><ins id='FRwsF'></ins><ul id='FRwsF'></ul><sub id='FRwsF'></sub></form><legend id='FRwsF'></legend><bdo id='FRwsF'><pre id='FRwsF'><center id='FRwsF'></center></pre></bdo></b><th id='FRwsF'></th></span></q></dt></tr></i><div id='FRwsF'><tfoot id='FRwsF'></tfoot><dl id='FRwsF'><fieldset id='FRwsF'></fieldset></dl></div>
  • <legend id='FRwsF'><style id='FRwsF'><dir id='FRwsF'><q id='FRwsF'></q></dir></style></legend>

      • <bdo id='FRwsF'></bdo><ul id='FRwsF'></ul>

        <small id='FRwsF'></small><noframes id='FRwsF'>

        使用Python-OpenCV消除图像中孤立的小区域操作

        时间:2023-12-18

        <small id='EBFmd'></small><noframes id='EBFmd'>

              <tbody id='EBFmd'></tbody>
            • <bdo id='EBFmd'></bdo><ul id='EBFmd'></ul>
                <i id='EBFmd'><tr id='EBFmd'><dt id='EBFmd'><q id='EBFmd'><span id='EBFmd'><b id='EBFmd'><form id='EBFmd'><ins id='EBFmd'></ins><ul id='EBFmd'></ul><sub id='EBFmd'></sub></form><legend id='EBFmd'></legend><bdo id='EBFmd'><pre id='EBFmd'><center id='EBFmd'></center></pre></bdo></b><th id='EBFmd'></th></span></q></dt></tr></i><div id='EBFmd'><tfoot id='EBFmd'></tfoot><dl id='EBFmd'><fieldset id='EBFmd'></fieldset></dl></div>

              • <legend id='EBFmd'><style id='EBFmd'><dir id='EBFmd'><q id='EBFmd'></q></dir></style></legend><tfoot id='EBFmd'></tfoot>
                • 当我们在处理图像时,有时会遇到一些孤立的小区域干扰我们的结果,这时我们可以使用Python-OpenCV库来消除它们。

                  下面是消除图像中孤立的小区域的完整操作攻略:

                  1.导入Python-OpenCV库

                  在Python代码开头,我们需要导入Python-OpenCV库,代码如下:

                  import cv2
                  

                  2.读取图像

                  在代码中使用以下代码读取要处理的图像:

                  image = cv2.imread("image.jpg")
                  

                  这里的"image.jpg"指的是我们需要处理的图像文件路径。在这个例子中,我们假设图像彩色。

                  3.将图像转换为灰度图像

                  对于简单的孤立的小区域消除操作,我们只需要处理灰度图像即可。我们可以使用以下代码将图像转换为灰度图像:

                  gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
                  

                  4.二值化处理

                  接下来,我们需要将灰度图像二值化,即将灰度图像中的像素值进行二分类,通常将较亮的像素设置为1,较暗的像素设置为0。此时,我们需要再次调用OpenCV库的cv2.threshold()函数,这个函数通过一个阈值来控制图像二值化的结果,示例如下:

                  ret, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)
                  

                  这里的参数解释如下:

                  • gray_image:转换为灰度的原始图像
                  • 127:阈值,当像素值大于阈值时,将像素设置为255,否则设置为0
                  • 255:阈值类型
                  • cv2.THRESH_BINARY:二值化类型

                  5.消除孤立的小区域

                  使用cv2.connectedComponents()函数,可以将图像中连通区域索引和连通区域大小的数组作为输出。我们可以指定cv2.connectedComponents算法中二值化后像素值为1表示的画素点(如0或1)。然后,cv2.connectedComponents()函数可以查找所有连通的区域,并返回它们的标志,低于某个尺寸的区域将被视为孤立的小区域,示例如下:

                  n_components, labels = cv2.connectedComponents(binary_image, connectivity=8)
                  for i in range(n_components):
                      if cv2.countNonZero(labels == i) <= 20:
                          binary_image[labels == i] = 0
                  

                  在这里,我们对每个标记区域应用了cv2.countNonZero()函数,这个函数可以计算二值图像中具有非零像素值的像素数量(即区域的大小)。如果区域的大小低于我们设定的阈值,它将被视为一个孤立的小区域,接下来我们使用numpy的掩码操作移除它们。

                  6.显示输出结果

                  完成上述操作后,我们需要将处理后的图像显示出来。我们可以使用以下代码将图像显示出来:

                  cv2.imshow("result", binary_image)
                  cv2.waitKey(0) 
                  

                  前一行代码将结果显示在一个名为“result”的窗口中,后一行代码则等待用户关闭窗口后才会停止程序。

                  至此,我们已经完成了使用Python-OpenCV消除图像中孤立的小区域操作。下面给出两个使用OpenCV消除图像中孤立的小区域的示例:

                  示例一

                  以下是代码,这里的目标是从彩色图像中提取红色水管:

                  import cv2
                  import numpy as np
                  
                  image = cv2.imread("pipe.jpg")
                  hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
                  
                  red_lower = (0, 70, 50)
                  red_upper = (10, 255, 255)
                  mask = cv2.inRange(hsv_image, red_lower, red_upper)
                  
                  n_components, labels = cv2.connectedComponents(mask, connectivity=8)
                  for i in range(1, n_components):
                      if cv2.countNonZero(labels == i) <= 100:
                          mask[labels == i] = 0
                  
                  cv2.imshow("result", mask)
                  cv2.waitKey(0)
                  

                  首先,我们读取一张彩色图像,并将其转换为HSV颜色空间,然后使用inRange()函数创建一个掩码图像来只留下红色的部分。接着,我们使用cv2.connectedComponents()函数来计算连通区域,并使用cv2.countNonZero()函数计算每个区域的尺寸。最后,我们对尺寸小于100的区域进行了消除。

                  示例二

                  接下来的代码处理了一个二值图像并消除了其中的孤立区域。这里的目标是将一幅手写数字的图像中的噪点消除:

                  import cv2
                  import numpy as np
                  
                  image = cv2.imread("digits_noisy.png")
                  gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
                  
                  # 二值化处理
                  ret, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)
                  
                  # 消除孤立小区域
                  n_components, labels = cv2.connectedComponents(binary_image, connectivity=8)
                  for i in range(1, n_components):
                      if cv2.countNonZero(labels == i) <= 5:
                          binary_image[labels == i] = 0
                  
                  cv2.imshow("result", binary_image)
                  cv2.waitKey(0)
                  

                  首先,我们读取一张二值数字图像。然后二值化图像并使用cv2.connectedComponents()来计算连通区域,并使用cv2.countNonZero()函数计算每个区域的尺寸。最后,我们对尺寸小于5的区域进行了消除。

                  上一篇:opencv实现静态手势识别 opencv实现剪刀石头布游戏 下一篇:Python 类,对象,数据分类,函数参数传递详解

                  相关文章

                    1. <small id='8FAnD'></small><noframes id='8FAnD'>

                        <bdo id='8FAnD'></bdo><ul id='8FAnD'></ul>

                      <tfoot id='8FAnD'></tfoot>
                      <i id='8FAnD'><tr id='8FAnD'><dt id='8FAnD'><q id='8FAnD'><span id='8FAnD'><b id='8FAnD'><form id='8FAnD'><ins id='8FAnD'></ins><ul id='8FAnD'></ul><sub id='8FAnD'></sub></form><legend id='8FAnD'></legend><bdo id='8FAnD'><pre id='8FAnD'><center id='8FAnD'></center></pre></bdo></b><th id='8FAnD'></th></span></q></dt></tr></i><div id='8FAnD'><tfoot id='8FAnD'></tfoot><dl id='8FAnD'><fieldset id='8FAnD'></fieldset></dl></div>
                      <legend id='8FAnD'><style id='8FAnD'><dir id='8FAnD'><q id='8FAnD'></q></dir></style></legend>