首页 > 解决方案 > 获取字符/三角形失败

问题描述

我想从酒吧读取字符/三角形。

首先,我将具有不同值的 Otsu 应用于此条,但无法正确获取所有字符。我也尝试了三角形检测,但无法再次提取。人物的颜色各不相同。有人可以提供另一种方法/算法来提取它们吗?另外,有没有办法进行颜色扫描,我的意思是尝试所有颜色,然后如果存在,提取(从黑白背景图像中提取所有颜色)?

ret,im1 = cv2.threshold(crop_img,0,255,cv2.THRESH_OTSU)

挑战,最后一个最难

在此处输入图像描述

我得到的最好的一个不成功:

在此处输入图像描述

标签: opencvimage-processing

解决方案


您的问题最好使用分色来解决。您可以使用该inrange()功能(docs)。这通常在 HSV 颜色空间中做得最好。下面的代码显示了如何做到这一点。

您可以使用此脚本查找进行分色所需的值范围。它还有一个示例图像,可以帮助您了解 HSV 的工作原理。

结果:
在此处输入图像描述

仅紫色:
在此处输入图像描述

代码:

    import numpy as np 
    import cv2
    # load image
    img = cv2.imread("image.png")

     # Convert BGR to HSV
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    # define range of HSV-color
    lower_val = np.array([0,50,80])
    upper_val = np.array([179,255,255])
    # purple only
    #lower_val = np.array([140,50,80])
    #upper_val = np.array([170,255,255])

    # Threshold the HSV image to get a mask that holds the markings
    mask = cv2.inRange(hsv, lower_val, upper_val)

    # create an image of the markings with background excluded
    img_masked = cv2.bitwise_and(img,img,mask=mask)

    # display image
    cv2.imshow("result", img_masked)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

推荐阅读