python - 有没有办法使用opencv中的阈值函数来检测小线条
问题描述
我想读取一个高度压缩的 jpeg 图像并将其转换为更清晰的阈值图像,如下所示:
输入图像
到好的阈值图像
但由于 jpeg 压缩,图像的线条更小,因此阈值的结果是:
错误的阈值图像
我想要一个图像,其中也有较小的线条,那么我该怎么做?
现在我正在使用 opencv 阈值函数使图像变成黑白,然后我使用侵蚀使线条变大一点。
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(thresh, BlackWhite) = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
kernel = np.ones((4, 4),np.uint8)
erosion = cv2.erode(BlackWhite, kernel,iterations = 1)
cv2_imshow(erosion)
解决方案
我为您的问题编写了此代码,尝试一下它会与您一起正常工作:)
def auto_canny(image, sigma=0.33):
# compute the median of the single channel pixel intensities
v = np.median(image)
# apply automatic Canny edge detection using the computed median
lower = int(max(0, (1.0 - sigma) * v))
upper = int(min(255, (1.0 + sigma) * v))
edged = cv2.Canny(image, lower, upper)
# return the edged image
return edged
image = cv2.imread('asd.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (1,1), 0)
edges = auto_canny(blur)
thresh = cv2.threshold(edges, 3, 255,cv2.ADAPTIVE_THRESH_MEAN_C | cv2.THRESH_OTSU)[1]
cv2.imshow('thres',thresh)
cv2.waitKey()
推荐阅读
- php - 当我设置测试的 setUp 方法时,没有结果
- batch-file - WiX 自定义操作 SetProperty 的命令行参数语法
- python - 使用 SPACY 的句子中第一个单词的 POS 计数
- c++ - 使用 C++ 在文本文件中修改
- java - Java - 如何在同一行中读取具有 Int 和字符串的文本文件
- java - Sqlite:更新查询不会将值更新到数据库
- python - 裁剪和存储图像集合的边界框图像区域?
- c++ - cout 输出不是从左到右吗?
- sql-server - SQL Server CASE,选择表列
- javascript - Github 页面未显示网站内容和错误 404