opencv—常用函数学习_“干货“_8

news/2024/8/26 13:38:30 标签: opencv, 计算机视觉, 人工智能

目录

二二、图像积分

计算图像的积分图像 (integral)

解释

应用场景

快速计算图像块和的示例

二三、图像边界处理

使用 copyMakeBorder 添加图像边界

解释

边界类型示例

二四、图像修复

使用 inpaint 进行图像修复

解释

实际应用

去除图像中的水印示例

http://t.csdnimg.cn/i8pqt —— opencv—常用函数学习_“干货“_总(VIP)

散的正在一部分一部分发,不需要VIP。

资料整理不易,有用话给个赞和收藏吧。


二二、图像积分

        在OpenCV中,图像积分是计算图像中某一矩形区域内所有像素值的总和。积分图像(也称为积分图)是一种加速某些图像处理操作的技术,如快速计算图像块的和。OpenCV提供了integral函数来计算积分图像。

图像积分函数
integral计算积分图像

计算图像的积分图像 (integral)
import cv2
import numpy as np

# 读取图像并转换为灰度图
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)

# 计算积分图像
integral_image = cv2.integral(image)

# 显示原图像和积分图像
cv2.imshow('Original Image', image)
cv2.imshow('Integral Image', integral_image.astype(np.uint8))  # 显示时转换为uint8类型
cv2.waitKey(0)
cv2.destroyAllWindows()

# 打印积分图像
print("Integral Image:\n", integral_image)

解释

  • integral函数:计算积分图像。积分图像中的每个元素表示原图像中从(0,0)到该位置的矩形区域内所有像素值的总和。
  • 显示积分图像:为了显示积分图像,我们将其转换为uint8类型,但要注意,积分图像中的值通常会大于255,所以在显示时会有信息损失。实际应用时,不需要进行这种转换。

应用场景

        积分图像在许多图像处理任务中非常有用,特别是在需要快速计算图像块和的场景。以下是一些常见的应用场景:

  1. 快速图像块和计算:在任意大小的矩形区域内快速计算像素值的总和。
  2. 特征提取:如Haar特征提取。
  3. 图像滤波:如快速均值滤波。

快速计算图像块和的示例

        假设我们需要计算图像中一个矩形区域的和,使用积分图像可以大大加速这一过程。

# 定义矩形区域的左上角和右下角坐标
top_left = (10, 10)
bottom_right = (50, 50)

# 使用积分图像计算矩形区域的和
sum_rect = (integral_image[bottom_right[1], bottom_right[0]] -
            integral_image[top_left[1] - 1, bottom_right[0]] -
            integral_image[bottom_right[1], top_left[0] - 1] +
            integral_image[top_left[1] - 1, top_left[0] - 1])

print("Sum of the rectangle:", sum_rect)

        在这个示例中,通过使用积分图像,我们可以在常数时间内计算任意矩形区域内的像素值和,而不需要遍历整个区域。

        通过这些示例,可以看到如何使用OpenCV中的integral函数来计算积分图像,并使用积分图像进行快速图像处理操作。根据具体的应用需求,可以灵活运用积分图像来实现高效的图像处理任务。

二三、图像边界处理

        在OpenCV中,边界处理是图像处理中的一个重要步骤。通过添加边界,可以解决图像卷积和滤波过程中出现的边界效应问题。OpenCV提供了一个函数 copyMakeBorder 来实现图像边界的添加。

图像边界处理函数
copyMakeBorder在图像周围添加边界

使用 copyMakeBorder 添加图像边界
import cv2
import numpy as np

# 读取图像
image = cv2.imread('path_to_image.jpg')

# 设置边界大小
top, bottom, left, right = 10, 10, 10, 10

# 添加边界
bordered_image = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[255, 0, 0])

# 显示原图像和添加边界后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Bordered Image', bordered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

解释

  • copyMakeBorder函数:在图像的四周添加边界。该函数的参数如下:
    • src:输入图像。
    • top:顶边界的大小。
    • bottom:底边界的大小。
    • left:左边界的大小。
    • right:右边界的大小。
    • borderType:边界类型,可以是以下几种:
      • cv2.BORDER_CONSTANT:常量边界,填充指定的常量值。
      • cv2.BORDER_REFLECT:反射边界,边界元素被镜像反射。
      • cv2.BORDER_REFLECT_101:反射边界,但不重复边界元素。
      • cv2.BORDER_REPLICATE:复制边界,边界元素被复制。
      • cv2.BORDER_WRAP:环绕边界,边界元素被环绕。
    • value:在使用cv2.BORDER_CONSTANT时,填充的常量值。

边界类型示例

        下面是一些不同边界类型的示例代码:

# 常量边界
constant_border = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[255, 0, 0])

# 反射边界
reflect_border = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_REFLECT)

# 反射边界101
reflect_101_border = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_REFLECT_101)

# 复制边界
replicate_border = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_REPLICATE)

# 环绕边界
wrap_border = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_WRAP)

# 显示不同类型的边界处理效果
cv2.imshow('Constant Border', constant_border)
cv2.imshow('Reflect Border', reflect_border)
cv2.imshow('Reflect 101 Border', reflect_101_border)
cv2.imshow('Replicate Border', replicate_border)
cv2.imshow('Wrap Border', wrap_border)
cv2.waitKey(0)
cv2.destroyAllWindows()

        这些示例展示了如何使用OpenCV中的copyMakeBorder函数来添加不同类型的边界。根据具体的应用需求,可以选择合适的边界类型来实现图像处理任务中的边界处理。

二四、图像修复

        在OpenCV中,图像修复(Inpainting)是一种用来恢复损坏图像或去除图像中不需要部分的技术。OpenCV提供了inpaint函数来实现这一功能。这个函数可以根据图像中周围的像素来填补缺失或受损的区域,从而使图像恢复原貌。

图像修复函数
inpaint对图像进行修复

使用 inpaint 进行图像修复
import cv2
import numpy as np

# 读取图像
image = cv2.imread('path_to_image.jpg')

# 创建掩码,白色表示需要修复的区域
mask = np.zeros(image.shape[:2], dtype=np.uint8)
mask[100:150, 100:150] = 255  # 这是一个示例区域

# 使用Navier-Stokes算法进行图像修复
restored_image_ns = cv2.inpaint(image, mask, 3, cv2.INPAINT_NS)

# 使用Telea算法进行图像修复
restored_image_telea = cv2.inpaint(image, mask, 3, cv2.INPAINT_TELEA)

# 显示原图像、掩码和修复后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Mask', mask)
cv2.imshow('Restored Image (Navier-Stokes)', restored_image_ns)
cv2.imshow('Restored Image (Telea)', restored_image_telea)
cv2.waitKey(0)
cv2.destroyAllWindows()

解释

  • 创建掩码:首先,我们创建一个与图像大小相同的掩码,其中白色(255)表示需要修复的区域,黑色(0)表示不需要修复的区域。
  • inpaint函数:使用cv2.inpaint函数对图像进行修复,该函数有四个参数:
    • src:输入图像。
    • inpaintMask:掩码图像,指定需要修复的区域。
    • inpaintRadius:修复的半径。
    • flags:修复算法,可以选择cv2.INPAINT_NS(Navier-Stokes算法)或cv2.INPAINT_TELEA(Telea算法)。

实际应用

        图像修复在实际中有广泛的应用场景,包括去除图像中的水印、修复老照片中的破损部分、去除图像中的不需要对象等。

去除图像中的水印示例
# 读取图像和创建掩码
image = cv2.imread('path_to_image_with_watermark.jpg')
mask = cv2.imread('path_to_watermark_mask.jpg', cv2.IMREAD_GRAYSCALE)

# 使用Telea算法进行图像修复
restored_image = cv2.inpaint(image, mask, 3, cv2.INPAINT_TELEA)

# 显示原图像、掩码和修复后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Mask', mask)
cv2.imshow('Restored Image', restored_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

        通过这些示例,可以看到如何使用OpenCV中的inpaint函数来进行图像修复。根据具体的应用需求,可以选择合适的修复算法来实现图像的恢复和处理。


http://www.niftyadmin.cn/n/5558175.html

相关文章

分布式 I/O 系统 BL200 Modbus TCP 耦合器

BL200 耦合器是一个数据采集和控制系统,基于强大的 32 位微处理器设计,采用 Linux 操作系统,支持 Modbus 协议,可以快速接入现场 PLC、SCADA 以及 ERP 系统, 内置逻辑控制、边缘计算应用,适用于 IIoT 和工业…

KITTI 3D 数据可视化

引言 KITTI 视觉基准测试套件(KITTI Vision Benchmark Suite)提供了大量用于理解自动驾驶场景的工具。尤其是3D数据可视化在分析和解释传感器(如激光雷达)与环境的复杂交互中起到了至关重要的作用。本文将详细探讨KITTI数据集中3…

追踪Conda包的踪迹:深入探索依赖关系与管理

追踪Conda包的踪迹:深入探索依赖关系与管理 Conda作为Python和其他科学计算语言的包管理器,不仅提供了安装、更新和卸载包的功能,还有一个强大的包跟踪功能,帮助用户理解包之间的依赖关系和管理环境。本文将详细解释如何在Conda中…

Web前端-Web开发CSS基础1-字体属性

一. 基础 1. 在一个html文件中引入"../css/format1.css"; 2. 在一个html文件中引入"../css/format2.css"; 3. 在一个html文件中引入"../css/format3.css"; 已知一个html文件中引入了一个css文件中,…

2024CAIP省赛

title: 2024CAIP省赛 date: 2024-07-16 22:13:50 tags: 总结 categories: 比赛 文章目录 RC-u1 热҈热҈热҈思路 RC-u2 谁进线下了?思路 RC-u3 暖炉与水豚思路 RC-u4 章鱼图的判断思路代码 RC-u5 工作安排思路 总结写在前面,就一句话 状态的保持胜过少…

Adobe Photoshop 2024 25.9.1 Win/Mac PS2024最新中文学习版

Adobe Photoshop 2024,简称PS,目前最强的图片处理合成软件,PS提供了广泛的工具和功能,包括画笔、铅笔、颜色替换、混合器画笔等绘画工具,以及裁剪、透视变形、智能修复画笔等编辑工具。用户可以使用这些工具进行图片编辑、合成、校…

【Linux】进程信号 --- 信号产生

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

鸿蒙系统在服装RFID管理中的应用:打造智能零售新时代

​随着物联网技术的迅速发展,服装零售行业正面临着新的变革与挑战。鸿蒙系统作为新一代智能操作系统,结合RFID技术,为服装行业提供了高效、智能的管理解决方案。常达智能物联,作为RFID技术的领先企业,致力于将鸿蒙系统…