python - 对象提取与构建

标签 python python-3.x opencv image-processing computer-vision

我得到以下图像作为输入。
enter image description here
我想从图像上去除背景和黑色电缆,而只保留红色电缆。
还要在由于黑色电缆而被隐藏的地方构造红色电缆。
注意:仅允许使用图像处理技术。不允许使用ML或DL。
在这种情况下,我要提取的是红色电线,但也可以是其他颜色,因此我想对其进行概括。
我猜可以通过膨胀和腐 eclipse 来完成构造。
但请帮助我如何提取此内容?

最佳答案

为了改善结果,您必须使用形态学运算,如果电缆的颜色不同,则还必须使用代码进行播放。没有通用解决方案,除了我可以说深度学习或机器学习可能会更好结果。

  • 编辑:感谢@ fmw42提到cv.inRange(),我更改了部分代码以在HSV空间中实现阈值化。

  • Results
    #========================
    # Import Libraies
    #========================
    import numpy as np 
    import matplotlib.pyplot as plt 
    import cv2 as cv 
    
    #------------------------
    # Read Image
    #========================
    img = cv.imread("img.jpg")
    imgHSV = cv.cvtColor(img, cv.COLOR_BGR2HSV)
    img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
    
    #------------------------
    # Threshold Image
    #========================
    ## mask of red
    mask1 = cv.inRange(imgHSV, (0, 30, 0), (10, 255,255))
    mask2 = cv.inRange(imgHSV, (170, 30, 0), (180, 255,255))
    
    mask = cv.bitwise_or(mask1, mask2)
    
    mask = np.tile(mask, (3,1,1))
    mask = np.swapaxes(mask , 0, 1)
    mask  = np.swapaxes(mask , 1, 2)
    
    print(mask.shape)
    
    th1 = cv.bitwise_and(img,mask)
    
    #------------------------
    # Morphology
    #========================
    kernel1 = np.ones((7,7),np.uint8)
    kernel2 = np.zeros((70,70),np.uint8)
    kernel2[10:60, 10:60] = 1
    
    img_opn = cv.morphologyEx(th1 ,cv.MORPH_OPEN ,kernel1)
    img_cls = cv.morphologyEx(img_opn, cv.MORPH_CLOSE, kernel2)
    
    #------------------------
    # Results Visualization
    #========================
    plt.figure(num = "Red Cable")
    
    plt.subplot(221)
    plt.imshow(img)
    plt.title('Original')
    plt.axis('off')
    
    plt.subplot(222)
    plt.imshow(th1)
    plt.title('Thresholded')
    plt.axis('off')
    
    plt.subplot(223)
    plt.imshow(img_opn)
    plt.title('Opening')
    plt.axis('off')
    
    plt.subplot(224)
    plt.imshow(img_cls)
    plt.title('Result')
    plt.axis('off')
    
    plt.show()
    #------------------------
    #------------------------
    

    关于python - 对象提取与构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64145295/

    相关文章:

    python - Python 中的刽子手游戏

    c++ - 禁用 OpenCV VideoWriter 输出

    opencv - Emgu 自适应阈值

    python - 为什么这个 Python 正则表达式否定前瞻不起作用?

    python - 对日期时间数据帧进行排序和组合 Pandas Python

    python - pandas 按 Q1 和 Q3 聚合进行分组

    python - 无法腌制 <type 'cv2.BRISK' > : attribute lookup cv2. BRISK 失败

    python - 文件中定义的全局变量不能更改

    python - 为什么 Python 的 eval() 拒绝这个多行字符串,我该如何修复它?

    python - 如何在Python中添加对箭头键的 react ?