python - 在使用 OpenCv 对图像进行二值化时,究竟在哪里使用形态学操作(膨胀、侵蚀、打开或关闭)
问题描述
我已经为图像二值化构建了一个代码,它工作得很好,但是我的二进制图像中的文本要么太大,要么里面有一些白噪声。我想做的是Erosion, Dilation, Opening, Closing
单独尝试,然后看看哪一个对我来说改善了结果。我应该在我的代码中哪里使用这些形态学操作。例如在Sharpened
和binary
图像之间或在division
和之间sharpened
?
import numpy as np
import cv2
import skimage.filters as filters
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
smooth = cv2.GaussianBlur(gray, (93,93), 0,)
division = cv2.divide(gray, smooth, scale=255)
# kernel = np.ones((5,5),np.uint8) # use operations here
# opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
sharp = filters.unsharp_mask(division, radius=1.5, amount=1.5, multichannel=False, preserve_range=False)
sharp = (255*sharp).clip(0,255).astype(np.uint8)
# kernel = np.ones((5,5),np.uint8) # or here
# opening = cv2.morphologyEx(sharp, cv2.MORPH_OPEN, kernel)
thresh = cv2.threshold(sharp, 0, 255, cv2.THRESH_OTSU )[1]
解决方案
推荐阅读
- android - Attempt to invoke virtual method on a null object reference when taking values from another class
- javascript - asp.net mvc 中的安全部分页面更新?
- dart - Flutter: Testing for exceptions in widget tests
- google-cloud-platform - What counts as a random object name in Google Cloud Storage?
- sql - 比较随时间戳变化的字符
- c++-cli - GCHandles 数组
- javascript - React 组件的状态,响应中数组中对象的错误顺序
- java - 如何使用 VSCODE 将 YML 文件添加到我的项目中?
- java-time - Java 时间是否正确处理密歇根的时区/夏令时历史?
- python - 嵌套循环以删除列表中的项目