OpenCV学习笔记02:OpenCV基本图片处理
本文详细介绍了如何利用OpenCV进行图像处理的相关操作与应用。通过六个具体的任务,涵盖了从基本的图片复制到高级的卷积核处理与二维滤波器应用等技术。每个任务都结合了理论知识与实践操作步骤,并展示了实际运行后的效果示例。这些内容不仅帮助读者掌握了OpenCV的核心功能,还,读者能够更深入地理解并灵活运用OpenCV进行图像处理工作。
文章目录
任务一、完成图像复制功能
(一)开发相应的程序代码
(二)调用开发的程序进行运行
(三)对代码进行优化和调整以输出灰度图像文件
-
任务二、绘制正方形与数字
-
- (一)编写程序,实现功能
- (二)运行程序,查看结果
-
任务三、利用卷积核提高图片中心亮度
-
- (一)讲解知识点
- (二)编写程序,实现功能
- (三)运行程序,查看结果
第4步:通过卷积核调整图像中心亮度
- 编程实现功能模块
- 执行测试并观察输出结果
任务五:应用高斯滤波器对图像进行处理
(一)介绍高斯滤波器的基本原理
(二)编写代码并实现图像滤波功能
(三)执行图像处理操作并分析结果
任务六、通过应用二维滤波器对图像进行处理
- 实战总结
OpenCV能够处理常见的Jpg bmp png tiff pbm等图像数据类型。除了这些基本格式之外 OpenCV还支持几乎所有常见的图像文件格式
任务一、实现图片复制
- 思路:利用OpenCV的图像读取与写入功能就可以实现图片的复制功能
(一)编写程序,实现功能
- 编写程序 -
图片复制.py

(二)运行程序,查看结果
- 在
images目录里有复制生成的图片文件out.jpg,图片格式从png变成jpg

(三)修改代码,复制生成灰度图
- 在读取图像时,设置第二个参数,读取灰度图

任务二、绘制正方形与数字
在OpenCV框架中,默认最为简便的方法是调用imed函数来获取图像数据。该函数能够从指定位置捕获一张图片(以二维或三维数组的形式呈现),随后通过执行相应的数组操作即可对图像属性进行调整,并生成所需图形界面或图形展示。
(一)编写程序,实现功能
- 编写程序 -
绘制正方形与数字.py

import cv2
import numpy as np
img = np.zeros((300, 300))
for i in range(1, 4):
img[10 * i:300 - 10 * i, 10 * i] = 255
img[10 * i:300 - 10 * i, 300 - 10 * i] = 255
img[10 * i, 10 * i: 300 - 10 * i] = 255
img[300 - 10 * i, 10 * i:300 - 10 * i] = 255
for i in range(1, 100):
img[50 + int(i * 1.4), 150 - i] = 255
img[50:250, 150] = 255
img[190, 50:230] = 255
cv2.imshow('square and number', img)
cv2.waitKey(0)
(二)运行程序,查看结果
- 三重正方形里有个数字
4

任务三、利用卷积核提高图片中心亮度
(一)讲解知识点
卷积核常用于OpenCV和一般的图像处理领域作为工具使用。其主要方法是通过预设的核块来识别特定区域。随后根据所检测到的像素与其周围的亮度差异调整其明亮度。这一过程有助于增强图像的质量或特征提取。
3阶中心增亮卷积核
kernel33 = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])
该卷积核采用[3×3]尺寸矩阵结构,在图像处理中用于计算中心像素与其周边像素之间的亮度差异。当这些亮度差异超出预期范围时,在经过该卷积核处理后会触发特定响应机制:即如果某像素在亮度上显著高于其周围邻居,则其自身亮度将得到增强。
kernel33_D = np.array([[1, 1, 1],
[1, -8, 1],
[1, 1, 1]])
该核的主要功能是降低中心像素的亮度。相较于周围像素而言,如果某个像素显得更为昏暗,则其亮度会进一步降低。
ndimage是一个专门用于处理多维图像数据的功能工具包库。它集成了丰富的图像处理功能模块,包括但不限于图像滤波技术、傅里叶变换算法、图像几何转换(如旋转与缩放)、图像特征量化分析以及形态学操作等
(二)编写程序,实现功能
- 编写程序 -
提高图片中心亮度.py

import cv2
import numpy as np
from scipy import ndimage
kernel33 = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])
img = cv2.imread('../images/hepburn.png', 0)
lightImg = ndimage.convolve(img, kernel33)
cv2.imshow('Light Image', lightImg)
cv2.waitKey(0)
从代码片段中可以看出,在深度学习模型中所指的卷积核实际上是一组具有初始赋值权重参数的滤子集合。这种参数配置决定了在处理图像数据时如何从现有的像素块中提取特征并生成新的像素表示。这些具有特定作用位置的权重参数被形象地称为卷积矩阵。这种局部区域内的邻域像素运算过程又被统称为卷积运算。基于这种核心操作的技术组件则被称为卷积层或者卷积网络结构等
值得注意的是,在卷积层的设计中将所有权重之和设为零具有重要意义。这种设计的主要目的是让卷积完成后的结果中增强边缘并使非边缘区域呈现黑色的效果。
查看原图 -hepburn.png

(三)运行程序,查看结果
采用了3x3尺寸的卷积核对输入图像进行色彩调制处理。然而由于所使用的卷积核增强力度过大,在最终处理后导致图像严重失真进而失去了展示其形态特征的能力。

任务四、利用卷积核降低图片中心亮度
(一)编写程序,实现功能
- 编写程序 -
降低图片中心亮度.py

import cv2
import numpy as np
from scipy import ndimage
kernel33_D = np.array([[1, 1, 1],
[1, -8, 1],
[1, 1, 1]])
img = cv2.imread('../images/hepburn.png', 0)
darkImg = ndimage.convolve(img, kernel33_D)
cv2.imshow('Dark Image', darkImg)
cv2.waitKey(0)
(二)运行程序,查看结果
通过一个3 \times 3的卷积核对输入图像进行亮度调低处理,在增强力度过大的情况下导致图像失真严重,并失去了反映自身形态特征的特征图谱。

任务五、采用高斯滤波处理图片
(一)讲解知识点
通过高通滤波技术对图像进行处理后,在生成的高通滤波图上计算并显示其与原始图像之间的差异效果。这种方法有助于更准确地提取图像的关键特征,并且在实际应用中具有广泛的使用基础。这种方法在现实场景中也被广泛采用作为主要的技术手段之一。
(二)编写程序,实现功能
- 编写程序 -
采用高斯滤波处理图片.py

(三)运行程序,查看记过
- 采用高斯模糊处理后提取的图像特征

任务六、使用二维滤波器处理图片
(一)讲解知识点
- OpenCV 包含一种常见的卷积核操作 filter2D功能。
- 使用 cv2.filter2D 函数时,默认采用 src 表示输入源图像;-1 参数表明所有通道的深度都会被处理;kernel 则是所使用的卷积内核矩阵,在实际应用中可灵活设置以实现不同的滤镜效果。
(二)编写程序,实现功能
- 编写程序 -
使用二维滤波器处理图片.py

import cv2
import numpy as np
kernel55_D = np.array([[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, -24, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]])
src_img = cv2.imread('../images/scenery.png', 0)
dst_img = src_img
cv2.filter2D(src_img, -1, kernel55_D, dst_img)
cv2.imshow('filter2D', dst_img)
cv2.waitKey()
- 查看原图

(三)运行程序,查看结果
- 通过二维滤波器降低色彩,达到一种黑白对比的强烈效果

实战总结
本次实战任务中,我们深入研究了OpenCV在图像处理中的强大功能。首先掌握如何通过OpenCV实现不同图像格式的数据读取与写入,并实现了图片复制功能。随后利用数组操作绘制了正方形和数字图形,并展示了其在图像编辑方面的能力。此外掌握使用卷积核来调节图像亮度,在此基础上能够通过改变中心亮度值来突出关键特征点。进一步学习并应用高斯滤波及二维滤波器等技术手段来提取或增强图像特征,在提升处理效果的同时也需要注意参数设置避免导致图像失真现象发生。以上实战任务不仅加深了对OpenCV工具的理解也为后续复杂图形处理工作奠定了扎实基础
