【问题标题】:How to use openCV to change white to black?如何使用openCV将白色变为黑色?
【发布时间】:2021-04-08 21:47:51
【问题描述】:

我有一个白色背景阻尼器上的豆,问题是阻尼器不是完全白色的(如 255,255,255)。我曾尝试使用 cv2.threshold() 方法,但我不断得到带有斑点的变形图像。实现这一目标的最佳方法是什么?

我的头像

我的代码

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY)

img[thresh == 255] = 0

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
erosion = cv2.erode(img, kernel, iterations = 1)

cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow("image", erosion)

最后,豆子应该只被黑色图像包围!

【问题讨论】:

    标签: python opencv computer-vision


    【解决方案1】:

    这可能是解决方案:

    import cv2
    import numpy as np
    
    
    img = cv2.imread("data/bob.jpg")
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    img_blured = cv2.blur(gray, (5, 5))
    ret, thres = cv2.threshold(img_blured, 130, 255, cv2.THRESH_BINARY)
    
    neg = cv2.bitwise_not(thres)
    erosion = cv2.erode(neg, np.ones((6, 6), np.uint8), iterations=1)
    cv2.imshow("erosion", erosion)
    
    # ret, thresh = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY)
    img[erosion == 0] = 0
    
    cv2.imshow("image", img)
    cv2.waitKey(0)
    

    我在这里使用cv2.threshold,但范围比你使用的更大,但在此之前我模糊了图像。然后我否定并侵蚀它。
    但这会稍微切断 bean 本身,如果这很关键,那么您应该使用完全不同的算法。例如,cv2.Canny 方法可以找到 bean 的轮廓并以某种方式对其进行进一步处理。

    【讨论】:

    • 如果cv2.erode 删除了一些bean,请尝试cv2.morphologyEx()cv2.MORPH_OPEN 选项。这执行腐蚀然后膨胀。替代的cv2.MORPH_CLOSE 也可能有用。
    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2020-05-08
    • 2020-01-28
    • 1970-01-01
    • 2018-12-23
    • 2020-05-25
    • 1970-01-01
    相关资源
    最近更新 更多