如何在opencv中检测仅包含文本的图像是不是模糊

Posted

技术标签:

【中文标题】如何在opencv中检测仅包含文本的图像是不是模糊【英文标题】:How to detect whether the image containing only text is blurred or not in opencv如何在opencv中检测仅包含文本的图像是否模糊 【发布时间】:2020-08-07 11:11:16 【问题描述】:

我已将 pdf 转换为 jpef 图像,并试图计算文本图像是否模糊。我曾尝试使用拉普拉斯滤波器,但即使对于良好的像素化图像,它也会给出不同的方差值。谁能帮我找出我的文本图像是高像素还是低像素。 提前致谢!!

Image1

对于此图像,拉普拉斯方差为 322,但如果我与多个具有相同像素质量的图像进行比较,则该值约为 500 - 1700。

【问题讨论】:

你能提供一些图片吗? @RahulKedia 我已经更新了图片。现在就来看看吧。 【参考方案1】:

一种方法是将图像阈值设置为不同的值,然后比较白色像素的数量。例如,

如果文本清晰且为黑色,则 img1 和 img2 的非零像素结果将非常相似。

如果img模糊了,那么差异会更大。

  import cv2
  image_path = r"d:\temp\xLVXa.jpg"
  imgColor = cv2.imread(image_path)
  img = cv2.cvtColor(imgColor, cv2.COLOR_BGR2GRAY)

  ret1, img1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
  ret2, img2 = cv2.threshold(img,192,255,cv2.THRESH_BINARY)

  whitepixels1 = cv2.countNonZero(img1)
  whitepixels2 = cv2.countNonZero(img2)

  print("img1 white pixels - %d" % whitepixels1)
  print("img2 white pixels - %d" % whitepixels2)

【讨论】:

感谢您的建议。但是我没有多个相同类型的图像可以比较。我得到了不同类型的文本图像,我想预测它是否像素化。 您不需要多张图片。只需使用 2 个值对同一图像进行阈值处理,然后进行比较 好吧。非常感谢..我会尝试这种方式 如果这对你有帮助,你能接受我的回答吗?谢谢 “非常相似”是什么意思?这个有编号吗?【参考方案2】:

您的图像没有模糊。相反,它非常尖锐和混乱,因此任何基于低梯度强度的测试都会失败。

某些字符看起来“有纹理”,我认为您可以检测到异常密度的角落(使用角落检测器)。有些没有太大损坏,永远无法从有效字符中分辨出来。

【讨论】:

以上是关于如何在opencv中检测仅包含文本的图像是不是模糊的主要内容,如果未能解决你的问题,请参考以下文章

如何针对低分辨率/模糊素材优化 OpenCV 的 Canny 边缘检测

如何定义阈值以仅检测图像中的绿色对象:Opencv [重复]

c++ opencv 图像模糊度检测

如何使用opencv从图像中检测文本

OpenCV:图像稳定

如何用opencv检测模糊圆的中心