首页 > 解决方案 > 无法使用opencv python计算图像中的对象

问题描述

我使用下面的代码使用opencv python在下图中查找香烟数量,但它不起作用。只有这个代码只能找到一些地方。我不知道是什么问题..请帮助我


    import numpy as np
    import cv2
    from PIL import Image
    import sys
    
    Path='D:\Artificial intelligence\Phyton'
    filename='Test.png'
    
    
    img = cv2.imread('D:\Artificial intelligence\Phyton\Test.png')
    img1 = cv2.imread('D:\Artificial intelligence\Phyton\Test.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 intelligence\Phyton\Test112.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 intelligence\Phyton\Test11234.png',img1)
    
    
    img = cv2.imread("D:\Artificial intelligence\Phyton\Test112.png")
    cv2.imwrite('D:\Artificial intelligence\Phyton\org.png',img)
    
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    ret,threshold = cv2.threshold(gray, 199, 255,cv2.THRESH_BINARY_INV)
    cv2.imwrite('D:\Artificial intelligence\Phyton\threshold.png',threshold)
    
    blur = cv2.medianBlur(gray,7)
    cv2.imwrite('D:\Artificial intelligence\Phyton\blur.png',blur)
    
    laplacian=cv2.Laplacian(blur,-1,ksize = 5,delta = -50)
    cv2.imwrite('D:\Artificial intelligence\Phyton\laplacian.png',laplacian)
    
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(7,7))
    dilation = cv2.dilate(laplacian,kernel,iterations = 1)
    cv2.imwrite('D:\Artificial intelligence\Phyton\dilation.png',dilation)
    result= cv2.subtract(threshold,dilation) 
    cv2.imwrite('D:\Artificial intelligence\Phyton\result.png',result)
    
    contours, hierarchy = cv2.findContours(result,cv2.RETR_LIST,cv2.CHAIN_APPROX_NONE)
    findcircles(gray,contours)

图片 :

在此处输入图像描述

我的结果:

在此处输入图像描述

标签: pythonopencv

解决方案


推荐阅读