计算机视觉实验五——图像分割

这篇具有很好参考价值的文章主要介绍了计算机视觉实验五——图像分割。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验目标

  1. 了解图割操作,实现用户交互式分割,通过在一幅图像上为前景和背景提供一些标记或利用边界框选择一个包含前景的区域,实现分割。
  2. 采用聚类法实现图像的分割(K-means方法)。

二、实验内容

1.了解图割操作,实现用户交互式分割,通过在一幅图像上为前景和背景提供一些标记或利用边界框选择一个包含前景的区域,实现分割

①图片准备

博主选择了一张前景与背景区分明显的图片,和一张前景与背景区分不明显的图片:
计算机视觉实验五——图像分割,计算机视觉,计算机视觉,人工智能,opencv,python
计算机视觉实验五——图像分割,计算机视觉,计算机视觉,人工智能,opencv,python

②代码

import cv2
import numpy as np

img = cv2.imread('building.jpg')
img = cv2.resize(img, (960, 720))

# 创建一个和图像大小相同的掩码,用于存储分割结果
mask = np.zeros(img.shape[:2], np.uint8)

bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)


# 定义鼠标回调函数,用于获取用户画出的矩形框
def draw_rect(event, x, y, flags, param):
    global ix, iy, drawing, rect_over

    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        ix, iy = x, y

    elif event == cv2.EVENT_MOUSEMOVE:
        if drawing == True:
            img_copy = img.copy()
            cv2.rectangle(img_copy, (ix, iy), (x, y), (0, 255, 0), 2)
            cv2.imshow('image', img_copy)

    # 调用grabCut算法进行分割
    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        rect_over = True
        cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 2)
        rect = (min(ix, x), min(iy, y), abs(ix - x), abs(iy - y))
        cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)
        cv2.imshow('image', img)


# 创建一个窗口,绑定鼠标回调函数
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_rect)

drawing = False  # 是否正在画矩形框
ix, iy = -1, -1  # 矩形框的起始坐标
rect_over = False  # 是否画完矩形框

while True:
    cv2.imshow('image', img)
    k = cv2.waitKey(1) & 0xFF

    # 如果画完矩形框,根据掩码显示分割结果
    if rect_over == True:
        mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8')
        img_cut = img * mask2[:, :, np.newaxis]
        cv2.imshow('result', img_cut)

    if k == 27:
        break

cv2.destroyAllWindows()

③运行结果

(1)前景与背景区分明显的图片
用鼠标画出矩形框:
计算机视觉实验五——图像分割,计算机视觉,计算机视觉,人工智能,opencv,python
分割结果:
计算机视觉实验五——图像分割,计算机视觉,计算机视觉,人工智能,opencv,python
(2)前景与背景区分不明显的图片
用鼠标画出矩形框:
计算机视觉实验五——图像分割,计算机视觉,计算机视觉,人工智能,opencv,python
分割结果:
计算机视觉实验五——图像分割,计算机视觉,计算机视觉,人工智能,opencv,python

④代码说明

使用了OpenCV库中的grabCut算法。此算法的原理是基于图割(graph cut)的思想,根据颜色信息和空间信息,将图像划分为四个部分:确定的背景、可能的背景、可能的前景和确定的前景。它会迭代地更新这四个部分,直到收敛为止。

  • 首先,读取一张图像,并创建一个和图像大小相同的掩码,用于存储分割结果。
  • 创建grabCut算法需要的背景和前景模型,用于存储颜色信息。
  • 定义一个鼠标回调函数,用于获取用户画出的矩形框(矩形框表示要分割出来的前景对象)。
  • 在这个函数中,当用户按下鼠标左键时,开始画矩形框,并记录起始坐标。当用户移动鼠标时,更新矩形框,并在图像上显示。当用户松开鼠标左键时,结束画矩形框,并调用grabCut算法进行分割。

2.采用聚类法实现图像的分割(K-means方法)

①代码

import numpy as np
import cv2
from sklearn.cluster import KMeans

# 读取图像并转换为RGB格式
img = cv2.imread('building.jpg')

img = cv2.resize(img, (960, 720))

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 将图像数据转换为二维数组
h, w, c = img.shape
data = img.reshape((h * w, c))

# 使用K-means聚类算法对图像数据进行分割,设置聚类数为3
kmeans = KMeans(n_clusters=3, random_state=0)
kmeans.fit(data)

# 获取聚类标签和中心点
labels = kmeans.labels_
centers = kmeans.cluster_centers_

# 将聚类标签转换为图像数据
labels = labels.reshape((h, w))
result = np.zeros((h, w, c), dtype=np.uint8)

# 根据聚类中心点给每个像素赋予相应的颜色
for i in range(h):
    for j in range(w):
        result[i, j] = centers[labels[i, j]]

# 显示原始图像和分割后的图像
cv2.imshow('Original', img)
cv2.imshow('Segmented', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

②运行结果

(1)前景与背景区分明显的图片
计算机视觉实验五——图像分割,计算机视觉,计算机视觉,人工智能,opencv,python
计算机视觉实验五——图像分割,计算机视觉,计算机视觉,人工智能,opencv,python
(2)前景与背景区分不明显的图片
计算机视觉实验五——图像分割,计算机视觉,计算机视觉,人工智能,opencv,python
计算机视觉实验五——图像分割,计算机视觉,计算机视觉,人工智能,opencv,python

③代码说明

使用了K-means方法实现图像的分割,K-means是一种基于划分的聚类算法,它的目标是将数据集划分为K个簇,使得每个数据点属于离它最近的簇中心所代表的簇。

在代码中,首先导入了numpy和cv2两个库,numpy用于处理数组和矩阵,cv2用于处理图像。然后读取了一张图像,并将其转换为RGB格式。接着将图像数据转换为二维数组,再使用sklearn.cluster中的KMeans类来进行聚类并对数据进行拟合。拟合后,可以获取聚类标签和中心点,再将聚类标签转换为图像数据,根据聚类中心给每个像素赋予相应的颜色,得到分割后的图像。最后显示原始图像和分割后的图像。文章来源地址https://www.toymoban.com/news/detail-852105.html

到了这里,关于计算机视觉实验五——图像分割的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 7 日论文合集)

    【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 7 日论文合集)

    用于图像异常检测的上下文亲和度提取 以往的无监督工业异常检测工作主要集中在局部结构异常,如裂纹和颜色污染。虽然在这种异常上实现了显着的高检测性能,但它们面临着违反远程依赖性的逻辑异常,例如放置在错误位置的正常对象。在本文中,基于以前的知识蒸馏工

    2024年02月12日
    浏览(39)
  • 图像处理与计算机视觉--第五章-图像分割-自适应阈值分割

    图像处理与计算机视觉--第五章-图像分割-自适应阈值分割

      在图片处理过程中,针对铺前进行二值化等操作的时候,我们希望能够将图片相应区域内所有的信息提供保留。实验室环境下,相应的素材是模板化的,但是将实验室方法应用于现实环境中时,我们会发现光影环境对于效果的影响其实是很大的。在这种情况下进行处理,

    2024年02月07日
    浏览(11)
  • 【深度学习:图像分割指南】计算机视觉中的图像分割指南:最佳实践

    【深度学习:图像分割指南】计算机视觉中的图像分割指南:最佳实践

    图像分割是计算机视觉中的一项关键任务,其目标是将图像划分为不同的有意义且可区分的区域或对象。这是物体识别、跟踪和检测、医学成像和机器人等各种应用中的一项基本任务。 许多技术可用于图像分割,从传统方法到基于深度学习的方法。随着深度学习的出现,图像

    2024年01月23日
    浏览(12)
  • 图像分割与语义分割在计算机视觉中的应用

    计算机视觉(Computer Vision)是人工智能领域的一个重要分支,它旨在让计算机理解和解释人类世界中的视觉信息。图像分割(Image Segmentation)和语义分割(Semantic Segmentation)是计算机视觉中的两个重要技术,它们涉及将图像中的不同部分分为不同的类别,以便计算机更好地理解图像的

    2024年03月12日
    浏览(9)
  • 计算机视觉与深度学习-图像分割-视觉识别任务01-语义分割-【北邮鲁鹏】

    计算机视觉与深度学习-图像分割-视觉识别任务01-语义分割-【北邮鲁鹏】

    给每个像素分配类别标签。 不区分实例,只考虑像素类别。 滑动窗口缺点 重叠区域的特征反复被计算,效率很低。 所以针对该问题提出了新的解决方案–全卷积。 让整个网络只包含卷积层,一次性输出所有像素的类别预测。 全卷积优点 不用将图片分为一个个小区域然后再

    2024年02月07日
    浏览(9)
  • 计算机视觉与深度学习-图像分割-视觉识别任务03-实例分割-【北邮鲁鹏】

    计算机视觉与深度学习-图像分割-视觉识别任务03-实例分割-【北邮鲁鹏】

    论文题目:Mask R-CNN 论文链接:论文下载 论文代码:Facebook代码链接;Tensorflow版本代码链接; Keras and TensorFlow版本代码链接;MxNet版本代码链接 参考:Mask R-CNN详解 将图像中的每个像素与其所属的目标实例进行关联,并为每个像素分配一个特定的标签,以实现像素级别的目标

    2024年02月07日
    浏览(15)
  • 主动轮廓——计算机视觉中的图像分割方法

    主动轮廓——计算机视觉中的图像分割方法

    ​    简单来说,计算机视觉就是为计算机提供类似人类的视觉。作为人类,我们很容易识别任何物体。我们可以很容易地识别山丘、树木、土地、动物等,但计算机没有眼睛,也没有大脑,因此它很难识别任何图像。计算机只能理解命令和数学。因此,有很多技术可以让

    2024年01月20日
    浏览(10)
  • 图像处理与计算机视觉--第五章-图像分割-Canny算子

    图像处理与计算机视觉--第五章-图像分割-Canny算子

    2.1.Canny算子简单介绍 Canny算子是一种非常常用的边缘检测算子,其效果图如下所示: 2.2.Canny算子边缘检测指标 Canny算子是基于边缘检测来实现的,那么边缘检测的指标如下所示: (1)好的信噪比,即将非边缘点判定为边缘点的概率要低。 (2)高定位,检测出的边缘要在实际边缘中

    2024年02月07日
    浏览(13)
  • 毕业设计选题:基于深度学习的舌头分割系统 人工智能 YOLO 计算机视觉

    毕业设计选题:基于深度学习的舌头分割系统 人工智能 YOLO 计算机视觉

    目录 前言 课题背景和意义 实现技术思路 一、 算法理论基础 1.1 Snake模型  1.2 几何约束  1.3 切片重组 二、 数据集 三、实验及结果分析 最后     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。

    2024年02月19日
    浏览(236)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包