python - OpenCV,如何加入/填充线条或框或圆圈中的间隙(Python)
问题描述
我有一组图像,其中的框和圆圈包含数字。一些盒子和圆圈没有在所有边上连接,线条上有一些间隙。
我想填补这个空白(如图所示),任何人都知道使用 OpenCV ......?
我的代码在这里…………
self.res = cv2.imread("1.jpg")
self.store_path = "../storage-data/"
#define kernal value
kernel = np.ones((2,2),np.uint8)
#grayscale
gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
dilate = cv2.dilate(gray,kernel,iterations = 1)
dilate1 = cv2.dilate(dilate,kernel,iterations = 1)
dilate1 = cv2.morphologyEx(dilate1, cv2.MORPH_OPEN, kernel)
#Canny
canny = cv2.Canny(dilate1,160,160,3)
dilate = cv2.dilate(canny,kernel,iterations = 1)
#Gaussian Blurring
blur = cv2.GaussianBlur(dilate,(5,5),0)
erode = cv2.dilate(blur,kernel,iterations = 1)
blur = cv2.GaussianBlur(erode,(5,5),1)
blur = cv2.morphologyEx(blur, cv2.MORPH_CLOSE, kernel)
ret, thresh = cv2.threshold(blur,127,255,cv2.THRESH_BINARY)
blur = cv2.GaussianBlur(thresh,(5,5),1)
ret1, thresh1 = cv2.threshold(blur,127,255,cv2.THRESH_BINARY)
opening = cv2.morphologyEx(thresh1, cv2.MORPH_OPEN, kernel)
cv2.imwrite(self.store_path + 'opening.jpg', opening)
contours, hierarchy = cv2.findContours(opening,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
解决方案
一次膨胀就足够了,关键是使用垂直内核,尝试改变内核的尺寸,例如 kernel = np.ones((5,2),np.uint8) 检查 1 次膨胀后的结果,它应该缩小差距.
推荐阅读
- c# - Rdlc 报告垂直条码
- java - 如何正确创建 Java 内部类?
- mysql - 限制表格列的行数
- apache-spark - IllegalArgumentException:此服务需要项目 ID,但无法从构建器或环境中确定
- amazon-web-services - AWS。通过 Glue 将数据从 S3 写入 Elasticsearch
- java - java keystore CA 证书有效性扩展
- pine-script - 如何在 pine 脚本中以柱线开盘价输入多头/空头策略?
- python - 输入选择生成多少结果
- xamarin.forms - 如何通过自动化 ID 获取文本?
- java - 使用杰克逊将计算的虚拟属性添加到每个字段