《OpenCV 4.10.0 实例:开启图像处理新世界》:此文为AI自动生成

一、OpenCV 4.10.0 初印象

OpenCV 作为一款广泛应用于计算机视觉领域的开源库,自 1999 年由 Intel 公司创立以来,已经走过了漫长的发展历程。从最初的为计算机视觉研究提供基础工具,到如今成为人工智能应用中的关键基石,OpenCV 不断演进,持续为开发者赋能。
OpenCV 4.10.0 版本更是带来了诸多令人瞩目的特性。在深度神经网络(DNN)模块,它进行了大量改进,显著优化了内存消耗,为深度学习任务提供了更高效的支持。例如,新增的 Net::dumpToPbtxt 方法,能让开发者使用 Netron 审查优化后的图,使得模型调试更加便捷直观。同时,该版本还添加了对多个 TFLite 层的支持,涵盖 Global_Pool_2D、Transpose、HardSwishInt8 等,进一步拓展了深度学习的应用边界。
不仅如此,OpenCV 4.10.0 还展现出了强大的跨平台能力。它新增了实验性 Windows ARM64 支持、实验性苹果 VisionOS 支持,以及 Linux 上的本机 Wayland 后端,让开发者能够在更多样化的硬件和操作系统环境下施展拳脚。无论是移动端的智能应用开发,还是桌面端的复杂视觉任务处理,亦或是新兴的 VR/AR 领域探索,OpenCV 4.10.0 都能提供坚实的技术支撑。
在接下来的内容中,我们将深入探究 OpenCV 4.10.0 的诸多功能模块,通过丰富详实的示例,揭示其在不同场景下的强大应用潜力。无论你是计算机视觉领域的新手,还是经验丰富的开发者,相信都能从这些示例中汲取灵感,开启属于自己的创新之旅。

二、环境搭建:开启 OpenCV 之旅

(一)不同系统安装指南

对于 Windows 用户,首先要从 OpenCV 官方网站下载 Windows 版本的安装包,通常是一个.exe 文件。下载完成后,双击运行,选择合适的解压路径,比如 “D:\opencv”。解压后,进入 “D:\opencv\build\x64\vc16\bin” 目录,将此路径添加到系统环境变量的 Path 中。可以通过右键点击 “此电脑”,选择 “属性”,再进入 “高级系统设置”,点击 “环境变量”,在 “系统变量” 中找到 Path 并编辑,新建一行添加上述路径。
接着打开 Visual Studio,新建一个项目,右键点击项目名选择 “属性”。在 “VC++ 目录” 下的 “包含目录” 中添加 “D:\opencv\build\include”,“库目录” 中添加 “D:\opencv\build\x64\vc16\lib”。在 “链接器” 的 “输入” 选项下的 “附加依赖项” 中,根据项目是 Debug 还是 Release 模式,分别添加 “opencv_world4100d.lib” 或 “opencv_world4100.lib”。
Linux 用户(以 Ubuntu 为例),先打开终端,更新系统软件包列表,输入命令 “sudo apt-get update”。接着安装编译所需的依赖项,如 “sudo apt-get install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev python3-dev python3-numpy libtbb2 libtbb-dev -y”。
然后使用 Git 克隆 OpenCV 源代码,“git clone https://github.com/opencv/opencv.git” 以及扩展模块 “git clone https://github.com/opencv/opencv_contrib.git”。进入 OpenCV 源代码目录,创建一个用于编译的临时目录,如 “mkdir build && cd build”。使用 CMake 进行配置,例如 “cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_QT=ON -D WITH_OPENGL=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules -D BUILD_EXAMPLES=ON…”。这里的参数可以根据需求调整,比如是否开启 Qt 支持、指定安装路径等。配置完成后,使用 “make -j (nproc)” 表示使用电脑的全部核心并行编译,最后 “sudo make install” 完成安装。
MacOS 用户可以借助 Homebrew 来简化安装过程。先打开终端,安装 Homebrew(如果未安装),输入命令 “/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)””。接着通过 Homebrew 安装 CMake,“brew install cmake”。然后使用 Homebrew 安装 OpenCV,“brew install opencv”。安装完成后,打开 Xcode,新建一个项目,在项目设置中,找到 “Header Search Paths” 添加 “/usr/local/include”,“Library Search Paths” 添加 “/usr/local/lib”。在 “Link Binary With Libraries” 中添加需要的 OpenCV 库文件,如 “libopencv_core.dylib”“libopencv_highgui.dylib” 等。
在安装过程中,可能会遇到一些问题。例如,在 Windows 系统下,若出现 “error C1083: 无法打开包括文件: ‘opencv2/opencv.hpp’: No such file or directory”,大概率是头文件路径设置有误,需要检查 “VC++ 目录” 下的 “包含目录” 设置。在 Linux 系统中,若编译时提示缺少某个依赖库,如 “libjasper-dev”,可以通过 “sudo add-apt-repository “deb http://security.ubuntu.com/ubuntu xenial-security main” && sudo apt update && sudo apt-get install libjasper-dev” 来解决。MacOS 系统下,若运行程序时出现找不到库文件的错误,可能是 Xcode 项目中的库文件路径设置不正确,需重新检查 “Header Search Paths” 和 “Library Search Paths”。

(二)配置细节与技巧

在配置开发环境时,合理的 IDE 配置能极大提升开发效率。以 Visual Studio 为例,除了上述基本的库文件和头文件配置,还可以在项目属性中调整一些编译选项。比如在 “C/C++” 的 “代码生成” 选项下,将 “运行库” 设置为 “多线程调试 (/MTd)” 或 “多线程 (/MT)”,根据项目需求选择,这可以避免一些运行时库冲突问题。
对于 PyCharm 用户,首先要确保 Python 解释器已经安装并配置好。在 PyCharm 的 “Settings” 中,找到 “Project Interpreter”,点击右侧的 “+” 号,搜索并安装 “opencv-python” 库。由于 OpenCV 的一些功能依赖于其他库,如 “numpy”“matplotlib” 等,也需要一并安装。安装完成后,在编写 Python 代码时,导入 cv2 模块即可开始使用 OpenCV。例如:

import cv2
image = cv2.imread('test.jpg')
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

这段简单的代码实现了读取一张图片并显示的功能,验证了 OpenCV 在 Python 环境下是否安装配置成功。在实际开发中,还可以在 PyCharm 的 “Run/Debug Configurations” 中设置一些运行参数,如指定 GPU 使用(如果项目涉及深度学习)、调整内存分配等,让程序运行更加高效。

三、基础图像处理实例

(一)图像读取、显示与保存

在 OpenCV 中,图像读取、显示与保存是最基础且常用的操作。以读取一张名为 “test.jpg” 的图片为例,使用cv2.imread函数,其语法为cv2.imread(filepath, flags),其中filepath是图片的文件路径,flags用于指定读取图像的方式,常见的有:

  • cv2.IMREAD_COLOR:以彩色模式读取图像,默认值,此时图像会被读取为 BGR 格式的三通道图像。
  • cv2.IMREAD_GRAYSCALE:以灰度模式读取图像,得到单通道的灰度图。
  • cv2.IMREAD_UNCHANGED:读取图像包含其 alpha 通道(若有),保持图像原始状态。
import cv2
# 以彩色模式读取图像
image = cv2.imread('test.jpg', cv2.IMREAD_COLOR) 
if image is None:
    print('无法读取图像')
else:
    # 创建一个名为'Image'的窗口,并设置为可自由调整大小
    cv2.namedWindow('Image', cv2.WINDOW_NORMAL) 
    cv2.imshow('Image', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

上述代码首先尝试读取图像,若读取成功则创建一个可自由调整大小的窗口‘Image’,并在其中显示图像,等待用户按键后关闭窗口。若要保存处理后的图像,比如将图像转换为灰度图后保存,可使用cv2.imwrite函数:

import cv2
image = cv2.imread('test.jpg', cv2.IMREAD_COLOR)
if image is None:
    print('无法读取图像')
else:
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 将灰度图保存为'gray_test.jpg',设置压缩质量为90(仅对JPEG格式有效)
    cv2.imwrite('gray_test.jpg', gray_image, [cv2.IMWRITE_JPEG_QUALITY, 90]) 

这里先将彩色图像转换为灰度图,再以较高质量保存为新的文件 “gray_test.jpg”,对于不同的图像格式,cv2.imwrite还有其他一些可选参数来控制保存细节,如 PNG 格式的压缩级别等。

(二)图像滤波与增强

图像滤波旨在去除噪声或增强特定特征,常见的滤波算法有均值滤波、高斯滤波和中值滤波。
均值滤波是一种简单的线性滤波方法,它通过计算图像每个像素周围邻域像素的平均值来替代该像素值,达到平滑图像、去除噪声的效果。在 OpenCV 中,使用cv2.blur函数,其语法为cv2.blur(src, ksize),src是输入图像,ksize是滤波器的大小,必须是奇数,如(3, 3)。

import cv2
image = cv2.imread('noisy_image.jpg', cv2.IMREAD_COLOR)
blurred_image = cv2.blur(image, (3, 3))
cv2.imshow('Original Image', image)
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

这段代码读取一张带有噪声的图像 “noisy_image.jpg”,经过(3, 3)的均值滤波器处理后,展示原始图像与滤波后的图像对比,可以看到图像变得更加平滑,但同时也损失了一些细节。
高斯滤波是一种加权均值滤波,每个像素的权重按照高斯分布函数进行分配,能在平滑图像的同时较好地保留边缘信息。通过cv2.GaussianBlur函数实现,语法为cv2.GaussianBlur(src, ksize, sigmaX),ksize是高斯核的大小,通常为奇数,sigmaX是水平方向的标准差,控制模糊程度,一般sigmaY与sigmaX相等。

import cv2
image = cv2.imread('noisy_image.jpg', cv2.IMREAD_COLOR)
gaussian_blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
cv2.imshow('Original Image', image)
cv2.imshow('Gaussian Blurred Image', gaussian_blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

对比均值滤波的示例,这里使用(5, 5)的高斯核处理图像,滤波后的图像在去除噪声的同时,边缘相对更加清晰,这是因为高斯滤波给予中心像素更高的权重,使得边缘细节得以保留。
中值滤波属于非线性滤波,它将像素邻域内的像素值排序,取中间值作为替代像素值,对于去除椒盐噪声效果显著,并且能较好地保持边缘信息。使用cv2.medianBlur函数,语法为cv2.medianBlur(src, ksize),ksize同样需为奇数。

import cv2
image = cv2.imread('salt_pepper_noisy_image.jpg', cv2.IMREAD_COLOR)
median_blurred_image = cv2.medianBlur(image, 3)
cv2.imshow('Original Image', image)
cv2.imshow('Median Blurred Image', median_blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

对于含有椒盐噪声(表现为图像中随机出现的黑白像素点)的 “salt_pepper_noisy_image.jpg”,经过中值滤波处理,噪声点被有效去除,同时图像的边缘和细节依然清晰可见,这是因为中值滤波不像均值滤波那样对所有像素求平均,而是选取中间值,避免了噪声对像素值的过度影响。
除了上述基本滤波,OpenCV 还提供了如双边滤波、导向滤波等更高级的滤波方法,用于在复杂场景下实现更精细的图像去噪与增强。例如双边滤波,它不仅考虑像素的空间邻域,还兼顾像素值的相似性,能在去除噪声的同时完美保留边缘。

import cv2
image = cv2.imread('noisy_image_with_edges.jpg', cv2.IMREAD_COLOR)
bilateral_filtered_image = cv2.bilateralFilter(image, 9, 75, 75)
cv2.imshow('Original Image', image)
cv2.imshow('Bilateral Filtered Image', bilateral_filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在处理既有噪声又有丰富边缘的图像 “noisy_image_with_edges.jpg” 时,双边滤波通过合理设置邻域直径、颜色标准

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空云风语

人工智能,深度学习,神经网络

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值