Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用打开的CV删除背景不精确,某些图片无法正确完成_Python_Opencv_Image Processing - Fatal编程技术网

Python 用打开的CV删除背景不精确,某些图片无法正确完成

Python 用打开的CV删除背景不精确,某些图片无法正确完成,python,opencv,image-processing,Python,Opencv,Image Processing,我正在尝试使用OpenCV从图像中删除背景。大多数操作都成功,但有些图片无法正确处理。任何帮助或建议都将不胜感激。 我的代码: 图片: 这是一个很好的例子: 这是一个坏例子: 使用HSV过滤 将图像颜色从BGR更改为HSV(色调饱和度值) 过滤一定范围的饱和度和色调 有关使用HSV过滤的代码,请参阅本页 将图像颜色从BGR更改为HSV(色调饱和度值) 过滤一定范围的饱和度和色调 有关依赖亮度的代码,请参阅本页,与颜色相比,亮度信息较差。尝试对饱和度或色调设置阈值。我在图像处理方面是新手,所以

我正在尝试使用OpenCV从图像中删除背景。大多数操作都成功,但有些图片无法正确处理。任何帮助或建议都将不胜感激。 我的代码:

图片:

这是一个很好的例子:

这是一个坏例子:

使用HSV过滤

  • 将图像颜色从BGR更改为HSV(色调饱和度值)
  • 过滤一定范围的饱和度和色调
  • 有关使用HSV过滤的代码,请参阅本页

  • 将图像颜色从BGR更改为HSV(色调饱和度值)
  • 过滤一定范围的饱和度和色调

  • 有关依赖亮度的代码,请参阅本页,与颜色相比,亮度信息较差。尝试对饱和度或色调设置阈值。我在图像处理方面是新手,所以我需要一些关于如何设置饱和度或色调阈值的指导。转换为饱和度或色调和阈值。你依赖亮度,与颜色相比,亮度信息较差。尝试在饱和度或色调上设置阈值。我是图像处理方面的新手,所以我需要一些如何在饱和度或色调上设置阈值的指导。转换为饱和度或色调和阈值。
    import os
    import numpy 
    import cv2
    import os
    import glob
    img_dir = r"C:\Users\kaan\Documents\Plant_Seedlings_Classification-master\Plant_Seedlings_Classification-master\data\osmancik"
    data_path = os.path.join(img_dir,'*g')
    files = glob.glob(data_path)
    data = []
    for f1 in files:
        img = cv2.imread(f1)
        img = cv2.resize(img, (640, 480)) 
        data.append(img)
    
    
    data2 = []
    arr = numpy.array(data2) 
    
    for pict in data:
    
        gray_img = cv2.cvtColor(pict, cv2.COLOR_BGR2GRAY)
        _, thresh = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
        img_contours = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[-2]
        img_contours = sorted(img_contours, key=cv2.contourArea)
    
        for i in img_contours:
            if cv2.contourArea(i) > 100:
                 break
        mask = np.zeros(img.shape[:2], np.uint8)
        cv2.drawContours(mask, [i],-1, 255, -1)
        new_img = cv2.bitwise_and(pict, pict, mask=mask)
        name=randomString()+".jpg"
        path = r"C:\Users\kaan\Documents\Plant_Seedlings_Classification-master\Plant_Seedlings_Classification-master\segmentated\osmancik2"
        cv2.imwrite(os.path.join(path , name), new_img)