Python 从图像中提取和保存字符

Python 从图像中提取和保存字符,python,image,image-processing,computer-vision,contour,Python,Image,Image Processing,Computer Vision,Contour,我在这篇文章中跟进: 这个解决方案非常适合我(经过一些调整),达到了预期的目的。但是,我试图通过保存每个字符来进一步改进。因此,在本文的示例中,我希望将字符K、N和M保存为它们自己的单独图像。我尝试使用rect对象的cv2.imwrite函数迭代嵌套的if循环,尽管最终输出是7个图像,其中包含整体图像,每次仅使用一个额外的矩形高亮显示下一个轮廓 这里有一个简单的方法: 获取二值图像。加载图像,灰度 提取ROI。 并从左到右排序,以确保轮廓的顺序正确。我们使用Numpy切片进行过滤,然后提取并保存

我在这篇文章中跟进:

这个解决方案非常适合我(经过一些调整),达到了预期的目的。但是,我试图通过保存每个字符来进一步改进。因此,在本文的示例中,我希望将字符
K
N
M
保存为它们自己的单独图像。我尝试使用rect对象的
cv2.imwrite
函数迭代嵌套的if循环,尽管最终输出是7个图像,其中包含整体图像,每次仅使用一个额外的矩形高亮显示下一个轮廓


这里有一个简单的方法:

  • 获取二值图像。加载图像,灰度

  • 提取ROI。 并从左到右排序,以确保轮廓的顺序正确。我们使用Numpy切片进行过滤,然后提取并保存每个ROI


  • 输入

    二值图像

    检测到以绿色突出显示的字符

    提取ROI

    代码


    你能添加一个示例图像吗?@Nathany当然可以,我现在已经在中编辑了它。在这个图像案例中,只有3个图像,而不是7个图像。如果你仍然有困难,让我知道它看起来很完美,我会尝试一下。非常感谢你!如果这个链接对你不起作用,看看我在下面发布的解决方案。我知道我的这个评论将被版主删除。但在这之前,你能给我推荐一些学习opencv的资源吗?我现在在大部分OCV问题中看到了你的答案。我是一个初学者,你能帮我解决这个问题吗?@Himanshupodar我也是一个初学者,我大约10个月前才开始使用简历。我只是阅读了文档并构建了一些应用程序来学习。我的第一个项目是建筑。只要边走边学一项新技术就行了
    import cv2
    from imutils import contours
    
    # Load image, grayscale, Otsu's threshold
    image = cv2.imread('1.png')
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY_INV)[1]
    
    # Find contours, sort from left-to-right, then crop
    cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]
    cnts, _ = contours.sort_contours(cnts, method="left-to-right")
    
    # Filter using contour area and extract ROI
    ROI_number = 0
    for c in cnts:
        area = cv2.contourArea(c)
        if area > 10:
            x,y,w,h = cv2.boundingRect(c)
            ROI = image[y:y+h, x:x+w]
            cv2.imwrite('ROI_{}.png'.format(ROI_number), ROI)
            cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2)
            ROI_number += 1
    
    cv2.imshow('thresh', thresh)
    cv2.imshow('image', image)
    cv2.waitKey()