无法获取字符/三角形

时间:2019-04-21 16:18:41

标签: opencv image-processing

我想从栏中读取字符/三角形。

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

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

挑战,最后一个是最困难的

enter image description here

我获得的最好的失败了:

enter image description here

1 个答案:

答案 0 :(得分:1)

使用分色可以最好地解决您的问题。您可以为此使用inrange()函数(docs)。通常在HSV色彩空间中最好做到这一点。下面的代码显示了如何执行此操作。

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

结果:
enter image description here

仅紫色:
enter image description here

代码:

    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()