Python OpenCV在无网格图像上绘制行列分隔竖线失败问题求助
我有如下所示的图像:
我需要在图像的行列之间添加垂直和水平分隔线,参考已有代码已经成功添加了水平分隔线,但添加垂直分隔线时出错,麻烦大家帮忙指出我的代码存在什么问题?
import cv2 import numpy as np import matplotlib.pyplot as plt file = r"C:/Users/gaojia/Dropbox/Projects/Parking_lot/Community_Group_Buying/scripts/test_2.png" # 读取图像 img = cv2.imread(file) hh, ww = img.shape[:2] # 转换为灰度图 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 灰度图二值化 thresh = cv2.threshold(gray, 254, 255, cv2.THRESH_BINARY)[1] # 统计每一列非零像素的数量 count = np.count_nonzero(thresh, axis=0) # 按图像高度对统计结果做二值化 count_thresh = count.copy() count_thresh[count==hh] = 255 count_thresh[count<hh] = 0 count_thresh = count_thresh.astype(np.uint8) # 提取轮廓 contours = cv2.findContours(count_thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) contours = contours[0] if len(contours) == 2 else contours[1] # 遍历轮廓获取边界框,计算x轴中点并绘制垂直线 result = img.copy() for cntr in contours: x,y,w,h = cv2.boundingRect(cntr) xcenter = x+w//2 cv2.line(result, (xcenter,0), (xcenter, hh-1), (0, 0, 0), 2) # 展示结果 cv2.imshow("THRESHOLD", thresh) cv2.imshow("RESULT", result) cv2.waitKey(0)
上述代码仅能在图像最左侧绘制一条垂直竖线,我将原图中自带的竖线移除后运行,结果依然没有变化。
编辑补充
根据第一条回答的提示,我意识到findContours()的输入不能为一维数组,因此我将如下代码段:
# 统计每一列非零像素的数量 count = np.count_nonzero(thresh, axis=0) # 按图像高度对统计结果做二值化 count_thresh = count.copy() count_thresh[count==hh] = 255 count_thresh[count<hh] = 0 count_thresh = count_thresh.astype(np.uint8)
替换为:
# 查找存在0值的行索引 row_zero = np.nonzero(np.any(thresh == 0, axis=1))[0] # 将存在0值的行所有像素设为0 thresh[row_zero, :] = 0
修改后成功在文本列之间添加了垂直分隔线。
内容的提问来源于stack exchange,提问作者Jia Gao
相关产品推荐
相关产品推荐

