Python通过水平虚线将图像分割为多个部分
我有一堆像这样的图像:Python通过水平虚线将图像分割为多个部分,python,opencv,image-processing,Python,Opencv,Image Processing,我有一堆像这样的图像: 其中,黄色框是不同配置文件(文本)的内容,其中每个部分由虚线分隔(不包括直线)。所以我需要的是用虚线将图像分割成多个单独的图像。到目前为止,我已经用Hough Line Transform尝试了很多python和cv2示例,但我的尝试都无法检测到。在@efivida的评论之后,下面是一个非常基本的方法 它所做的只是检查给定图片中的每一行像素值是否等于包含虚线的第一行,然后裁剪图片以将其分割为多个图片 # import image/array manipulation p
其中,黄色框是不同配置文件(文本)的内容,其中每个部分由虚线分隔(不包括直线)。所以我需要的是用虚线将图像分割成多个单独的图像。到目前为止,我已经用Hough Line Transform尝试了很多python和cv2示例,但我的尝试都无法检测到。在@efivida的评论之后,下面是一个非常基本的方法 它所做的只是检查给定图片中的每一行像素值是否等于包含虚线的第一行,然后裁剪图片以将其分割为多个图片
# import image/array manipulation packages
import cv2
import numpy as np
# read image with OpenCV 2
img = cv2.imread("path/to/file/z4Xje.jpg")
# identify one line of pixels that has dashes
dashes = img[761,:,:]
# check where to split the picture and store that information
splits = [0]
for i in range(img.shape[0]):
# np.allclose allows you to have small differences between dashed lines
if np.allclose(img[i,:,:], dashes):
splits.append(i)
# add last split (height of picture)
splits.append(img.shape[0])
# write each cropped picture to your desired directory
for j in range(len(splits)-1):
new_img = img[splits[j]:splits[j+1],:]
cv2.imwrite("/path/to/export/"+str(j)+".jpg", new_img)
这当然不是一个完美的解决方案,但我希望它能为您提供如何改进当前算法的线索
它给了我这些你提供的照片:
- 第一次分裂
- 第二次分裂
- 第三次分裂
在您的图片中,虚线似乎总是遵循完全相同的模式。你所有的照片都是这样吗?“我猜不是,但我要求确认一下。”混血王子。这来自一个生成的文档,所以我想是的总是相同的模式。简单地检查给定图片中的每一行像素值是否等于包含虚线的第一行,然后裁剪图片以将其拆分为多张图片,不是很有效吗?@混血王子,嗯,也许这是个更好的主意,而不是我的方法。你能给我举个例子说明怎么做吗?我补充了我的想法,尽管如前所述,这肯定不是最好的方法!