sta*_*low 3 python opencv contour
我正在尝试识别手写数字。假设我有以下图像:
我的目标是平滑轮廓的极值特征,并仅保留白色痕迹的形状,如下所示:
我首先申请cv2.THRESH_BINARY_INV
消除噪音。
现在我尝试应用cv2.erode()
withnp.ones((5,5))
作为内核,但结果图仍然有极值点。
我认为应用cv2.findContours()
可能有助于获得所需的形状,但我最终会得到两个轮廓,一个用于内部,另一个用于外部。任何想法将不胜感激!
编辑:感谢@stateMachine,我设法得到了数字的骨架。我申请了cv2.ximgproc.thinning()
,然后是cv2.GaussianBlur()
和cv2.MORPH_CLOSE
。如果这个图像的极值点可以平滑一点那就完美了。我仍然对任何想法持开放态度:)
也许您正在寻找的是形状的骨架。该框架是 OpenCV 扩展图像处理模块 ( pip install opencv-contrib-python
) 的一部分。您可以像这样计算图像的骨架:
# Imports:
import cv2
# Image path
path = "D://opencvImages//"
fileName = "OKwfZ.png"
# Reading an image in default mode:
inputImage = cv2.imread(path + fileName)
# To Grayscale:
grayscaleImage = cv2.cvtColor(inputImage, cv2.COLOR_BGR2GRAY)
# Compute the skeleton:
skeleton = cv2.ximgproc.thinning(grayscaleImage, None, 1)
cv2.imshow("Skeleton", skeleton)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)
这是结果:
骨架将图像的厚度标准化为1 pixel
。如果你需要更粗的线,你可以涂一些dilations
。
归档时间: |
|
查看次数: |
123 次 |
最近记录: |