gpt4 book ai didi

python - 使用openCV确定文本中的分割线

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:05 25 4
gpt4 key购买 nike

我想检测扫描文档中的分割线,而不是使用 cv2.Canny,我使用 cv2.threshold 来获得一个非常干净的预处理图像。但是,我的 cv2.HoughLines 参数可能不正确,最终输出出现困惑。并且线条没有呈现为设置颜色。

我的代码是:

import cv2
import numpy as np
from matplotlib import pyplot as plt

## (1) read
img = cv2.imread("q11.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.figure(figsize=(17,17))
plt.imshow(gray,cmap='gray')

## (2) threshold
th, threshed = cv2.threshold(gray, 200, 20, cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)
plt.figure(figsize=(15,15))
plt.imshow(threshed,cmap='gray')

## (3) HoughLines
lines = cv2.HoughLines(threshed,rho=1,theta=np.pi/180,threshold = 800)
for i in range(len(lines)):
for rho,theta in lines[i]:
a = np.cos(theta)
b = np.sin(theta)
x0 = a*rho
y0 = b*rho
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*(a))
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*(a))
cv2.line(threshed,(x1,y1),(x2,y2),(0,0,255),2)

plt.figure(figsize=(10, 10))
plt.subplot(111),plt.imshow(threshed)
plt.title('hough'), plt.xticks([]), plt.yticks([])

原图为: enter image description here

cv2.thresholdcv2.THRESH_BINARY_INV|cv2.THRESH_OTSU 之后,我得到了: enter image description here

我想要: enter image description here

我实际得到的是:

enter image description here

最佳答案

这是一个简单的方法

  • 将图像转换为灰度和高斯模糊
  • 阈值图像
  • 扩张以增强轮廓
  • 检测线

阈值

接下来我们扩张以增强轮廓,然后使用 cv2.HoughLinesP()检测线。你提到

The lines don`t show as the set color

这是因为您试图在二值图像(阈值图像)上画线。由于它只有一个 channel ,因此像素只有白色或黑色。因此它不会显示颜色。你必须把它画在彩色图像上

import cv2
import numpy as np

image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)

thresh = cv2.threshold(blur,190, 255,cv2.THRESH_BINARY_INV)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5,5))
dilate = cv2.dilate(thresh, kernel, iterations=1)

minLineLength = 10
maxLineGap = 200
lines = cv2.HoughLinesP(dilate,1,np.pi/180,100,minLineLength,maxLineGap)
for line in lines:
for x1,y1,x2,y2 in line:
cv2.line(image,(x1,y1),(x2,y2),(0,0,255),3)

cv2.imshow('image', image)
cv2.imshow('thresh', thresh)
cv2.waitKey()

关于python - 使用openCV确定文本中的分割线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54119500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com