Невозможно подсчитать объекты в изображении с помощью opencv python

#python #opencv

#питон #opencv

Вопрос:

Я использовал приведенный ниже код для поиска количества сигарет на изображении ниже, используя opencv python, но он не работал. Только этот код находит только некоторые места. я не знаю, в чем проблема .. пожалуйста, помогите мне

 
    import numpy as np
    import cv2
    from PIL import Image
    import sys
    
    Path='D:Artificial intelligencePhyton'
    filename='Test.png'
    
    
    img = cv2.imread('D:Artificial intelligencePhytonTest.png')
    img1 = cv2.imread('D:Artificial intelligencePhytonTest.png')
    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.imwrite('D:Artificial intelligencePhytonTest112.png',erosion)
    
    
    def findcircles(img,contours):
        minArea = 300;
        minCircleRatio = 0.5;
        for  contour  in contours:
            (x,y),radius = cv2.minEnclosingCircle(contour)
            center = (int(x),int(y))
            radius = int(radius)
    
            if radius > 5:
                 continue;
            cv2.circle(img1, center, 1, (191, 255, 0), 2)
            cv2.imwrite('D:Artificial intelligencePhytonTest11234.png',img1)
    
    
    img = cv2.imread("D:Artificial intelligencePhytonTest112.png")
    cv2.imwrite('D:Artificial intelligencePhytonorg.png',img)
    
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    ret,threshold = cv2.threshold(gray, 199, 255,cv2.THRESH_BINARY_INV)
    cv2.imwrite('D:Artificial intelligencePhytonthreshold.png',threshold)
    
    blur = cv2.medianBlur(gray,7)
    cv2.imwrite('D:Artificial intelligencePhytonblur.png',blur)
    
    laplacian=cv2.Laplacian(blur,-1,ksize = 5,delta = -50)
    cv2.imwrite('D:Artificial intelligencePhytonlaplacian.png',laplacian)
    
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(7,7))
    dilation = cv2.dilate(laplacian,kernel,iterations = 1)
    cv2.imwrite('D:Artificial intelligencePhytondilation.png',dilation)
    result= cv2.subtract(threshold,dilation) 
    cv2.imwrite('D:Artificial intelligencePhytonresult.png',result)
    
    contours, hierarchy = cv2.findContours(result,cv2.RETR_LIST,cv2.CHAIN_APPROX_NONE)
    findcircles(gray,contours)

 

Изображение :

введите описание изображения здесь

Мой результат:

введите описание изображения здесь

Комментарии:

1. почему вы рассылаете такие теги, как c # и asp.net ?!

2. глядя на исходную картинку и результат … Тенденция явно находится в середине картинки — почему? потому что есть более сильный контраст, который теряется в сторону из-за угла перспективы. Как это исправить, я не знаю, что я пришел с C #, поскольку вы пометили это как C #, и это явно вопрос opencv и python!

3. Границы кругов в углу изображения не такие четкие, как те, что посередине. Попробуйте точно настроить параметры для различных функций cv.