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

yizhihongxing

当我们在处理图像时,有时会遇到一些孤立的小区域干扰我们的结果,这时我们可以使用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的区域进行了消除。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python-OpenCV消除图像中孤立的小区域操作 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 简单说明Python中的装饰器的用法

    下面就详细讲解一下Python中的装饰器用法。 什么是装饰器 装饰器是Python中非常重要的一个语法特性,它本质上是函数,但是和普通函数又不同。它的作用是装饰已有的函数或类,添加一些额外的功能,而不需要修改被装饰对象的源代码。 装饰器的用法 1. 函数装饰器 函数装饰器是使用最广泛的装饰器类型。它的用法是在函数定义前面添加一行@decorator_name…

    python 2023年6月2日
    00
  • python2 中 unicode 和 str 之间的转换及与python3 str 的区别

    Python2 和 Python3 中字符串类型有所不同,因此在字符串的处理上也存在差异,其中一个重要的区别是 Python2 中有两种类型的字符串: str 和 unicode,而 Python3 则只有一种类型的字符串: str。 在 Python2 中 str 类型代表的是字节串,而 unicode 类型代表的是 Unicode 字符串,两者不能直接进…

    python 2023年5月31日
    00
  • Python编写运维进程文件目录操作实用脚本示例

    Python编写运维进程文件目录操作实用脚本是一项非常实用的技能。下面针对该技能,给出完整的攻略: 什么是Python编写运维进程文件目录操作实用脚本? Python编写运维进程文件目录操作实用脚本是指使用Python编程语言来编写一些实用脚本,可以对运维进程进行管理和操作,方便对文件和目录进行操作。 Python编写运维进程文件目录操作实用脚本技能要求 P…

    python 2023年6月2日
    00
  • Python 安装第三方库 pip install 安装慢安装不上的解决办法

    下面是针对“Python安装第三方库pip install安装慢安装不上的解决办法”的完整攻略: 1. 安装pip 在使用pip安装第三方库之前,我们需要先安装pip。如果你已经安装了Python3.4及以上版本,pip应该已经自带了。可以在终端输入以下命令,检查是否有pip的版本: pip –version 如果没有安装pip,可以通过以下命令安装: c…

    python 2023年5月14日
    00
  • Python Pillow Image.save 保存为jpg图片压缩问题

    Python Pillow是一个常用的图像处理库,它支持将图片保存到本地文件中。但是,在保存为JPEG格式的时候,用户可能会遇到图片过大的问题。所以,本文将介绍如何通过Pillow对JPEG格式的图片进行压缩,以及一些压缩的方法和注意事项。 1. 安装Pillow 可以使用pip命令安装Pillow库。 pip install Pillow 2. 保存为JP…

    python 2023年5月19日
    00
  • python实现requests发送/上传多个文件的示例

    下面是关于“python实现requests发送/上传多个文件的示例”的完整攻略。 环境准备 在使用requests库发送或上传多个文件之前,需要保证你已经安装了requests库和os库。你可以在命令行中输入以下命令进行安装: pip install requests 发送/上传单个文件 在使用requests库发送或上传多个文件之前,我们先来看一下如何发…

    python 2023年5月14日
    00
  • Python自动化办公之读取Excel数据的实现

    下面是 Python 自动化办公之读取 Excel 数据的实现的完整攻略。 一、准备工作 安装 Python在 Python 官网下载对应操作系统的安装包后安装。 安装 openpyxl 模块在命令行界面输入以下指令安装: pip install openpyxl 二、读取 Excel 数据 导入 openpyxl 模块 在 Python 代码中导入 ope…

    python 2023年6月5日
    00
  • 浅析Python自带性能强悍的标准库itertools

    浅析Python自带性能强悍的标准库itertools 什么是itertools itertools是Python中一个非常强大的标准库,设计目的是为了高效地处理迭代器和可迭代对象。它包含了大量的能够高效处理迭代对象的工具函数。 有了itertools,我们可以在Python中非常方便地进行许多常见的操作,比如创建各种组合、排列和迭代器等。 itertool…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部