OpenCV米粒检测数量统计

Python+OpenCV米粒检测数量统计

如需远程调试,可加QQ905733049由专业技术人员远程协助!

运行代码如下:

# -*- coding:utf-8 -*-
import cv2  
import numpy as np
import matplotlib.pyplot as plt

print("Hellow word!")     
img = cv2.imread("test.png")  
#cv2.namedWindow("imagshow", 
#cv2.imshow('imagshow', img)    

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

dst = cv2.adaptiveThreshold(gray,255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,101, 1)

#res ,dst = cv2.threshold(gray,0 ,255, cv2.THRESH_OTSU)

element = cv2.getStructuringElement(cv2.MORPH_CROSS,(3, 3))
dst=cv2.morphologyEx(dst,cv2.MORPH_OPEN,element)  
dst,hierarchy = cv2.findContours(dst,cv2.EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)  
cv2.drawContours(dst,contours,-1,(120,0,0),2)  #绘制轮廓

count=0 
ares_avrg=0  
for cont in contours:

    ares = cv2.contourArea(cont)

    if ares<50:   
        continue
    count+=1    
    ares_avrg+=ares

    print("{}-blob:{}".format(count,ares),end="  ") 

    rect = cv2.boundingRect(cont) 

    print("x:{} y:{}".format(rect[0],rect[1]))
    x={format(rect[0])}
    y={format(rect[1])}
    print(x)
    print(y)
    ellipse = cv2.fitEllipse(cont)
    #cv2.rectangle(img,(0,0),(0,0),(0xff),2)
    cv2.ellipse(img,ellipse,(0xff),2)

    y=10 if rect[1]<10 else rect[1] 

    cv2.putText(img,str(count), (x, y), cv2.FONT_HERSHEY_COMPLEX, 0.5, (0, 255, 0), 1) 

print("米粒平均面积:{}".format(round(ares_avrg/ares,2))) 

cv2.namedWindow("imagshow", 2)   
cv2.imshow('imagshow', img)    

cv2.namedWindow("dst", 2)   
cv2.imshow("dst", dst)  


#plt.hist(gray.ravel(), 256, [0, 256]) 
#plt.show()


cv2.waitKey()

运行结果:

OpenCV米粒检测数量统计_第1张图片

OpenCV米粒检测数量统计_第2张图片

你可能感兴趣的:(OpenCV米粒检测数量统计)