使用OpenCV进行图像投影及直方图分析

图片[1]-使用OpenCV进行图像投影及直方图分析-山海云端论坛

引言

本文将探讨图像的投影直方图概念,以及如何绘制这些直方图。举例来说,当我们需要识别字符时,投影可以帮助我们从图像中提取特征。投影直方图是一种通过在特定方向上对图像进行投影来描述图像的方法,比如垂直或水平方向。这些投影表示每列或每行中属于对象的像素数量。

投影直方图的应用

举个简单的例子,看下图:

图片[2]-使用OpenCV进行图像投影及直方图分析-山海云端论坛

这幅图展示了数字5及其垂直和水平方向的投影。这两个直方图可以用作数字5的向量描述符。通过与表示数字0到9的直方图向量进行相似度计算,我们可以确定当前数字是什么。

读入图像并进行灰度化

让我们来看一个实际项目的例子:

首先,使用OpenCV读取彩色图像并将其转换为灰度图像,示例代码如下:

<code>import cv2 import numpy as np import matplotlib.pyplot as plt # 读入图像 img = cv2.imread('display_image.png') # 转换为灰度图 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)</code>

结果如下:

图片[3]-使用OpenCV进行图像投影及直方图分析-山海云端论坛

图中上半部分为输入原图,下半部分为灰度图。

二值化操作

接下来,对灰度图进行中值滤波去噪,然后进行膨胀和腐蚀操作,示例代码如下:

<code># 中值滤波 gray = cv2.medianBlur(gray,5) # 自适应阈值化 thresh = cv2.adaptiveThreshold(gray, 255, 1, 1, 11, 2) # 膨胀和腐蚀操作 kernel = np.ones((5,5), np.uint8) thresh = cv2.dilate(thresh, kernel ,iterations = 2) thresh = cv2.erode(thresh, kernel, iterations = 2)</code>

得到的结果如下:

图片[4]-使用OpenCV进行图像投影及直方图分析-山海云端论坛

图中上半部分为中值滤波后的图像,下半部分为经过二值化、膨胀和腐蚀后的图像。

提取轮廓

使用findContours函数获取封闭区域的轮廓,并过滤掉较小高度的轮廓,示例代码如下:

<code># 寻找轮廓 contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) # 对每个轮廓,找到边界矩形并绘制 for cnt in contours: x, y, w, h = cv2.boundingRect(cnt) if h > 10: cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)</code>

得到的结果如下:

图片[5]-使用OpenCV进行图像投影及直方图分析-山海云端论坛

计算直方图

最后,我们来计算沿x轴方向的投影,示例代码如下:

<code># 获取图像的宽度和高度 height, width = thresh.shape # 沿垂直方向像素值求和 vertical_px = np.sum(thresh, axis=0) # 归一化 normalize = vertical_px/255 # 创建全零的黑色图像 blankImage = np.zeros_like(thresh) # 绘制垂直投影直方图 for idx, value in enumerate(normalize): cv2.line(blankImage, (idx, 0), (idx, height-int(value)), (255,255,255), 1) # 拼接图像 img_concate = cv2.vconcat([img, cv2.cvtColor(blankImage, cv2.COLOR_BGR2RGB)]) cv2.imshow("out",img_concate) cv2.waitKey(0)</code>

得到的结果如下:

图片[6]-使用OpenCV进行图像投影及直方图分析-山海云端论坛

请注意,在上图中重复的数字(如4和3),它们的垂直投影直方图几乎是相同的!

总结

本文简要介绍了如何制作投影直方图以及如何绘制它。正如所述,我们可以为每个字符创建一个存储向量,并用它来进行字符分类。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容