如何在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 边缘检测