从材料粒子图片测量气泡大小-Python-OPenCV

时间:2020-01-22 09:56:49

标签: python-3.x opencv image-processing

我正在尝试测量从现实世界中的物质粒子拍摄的图像中可用气泡的大小和数量。

我已经尝试过目前的方法Here(第二种方法是opencv)。但是有些原因可能是由于气泡的缘故,因为图像质量一般。

有人可以指导我正确的方向或提供建议吗?

我正在尝试的参考图像是

below

结果: 它没有检测到圆,实际上是在寻找轮廓的步骤中,它为零,因此未通过测试。

进行了一些更改。能够检测到一些气泡,但仍然不好。检测到的气泡图像低于

after processing

谢谢

代码:

import cv2

image = cv2.imread('....')

# Gray, blur, adaptive threshold
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (11,5), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

# Morphological transformations
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
# Find contours
cnts = cv2.findContours(opening, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
    # Find perimeter of contour
    perimeter = cv2.arcLength(c, True)
    # Perform contour approximation
    approx = cv2.approxPolyDP(c, 0.04 * perimeter, True)
    if len(approx) > 6:

            # Obtain bounding rectangle to get measurements
            x,y,w,h = cv2.boundingRect(c)

            # Find measurements
            diameter = w
            radius = w/2

            # Find centroid
            M = cv2.moments(c)
            cX = int(M["m10"] / M["m00"])
            cY = int(M["m01"] / M["m00"])

            # Draw the contour and center of the shape on the image
            cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),4)
            cv2.drawContours(image,[c], 0, (36,255,12), 4)
            cv2.circle(image, (cX, cY), 15, (320, 159, 22), -1)

            # Draw line and diameter information
            cv2.line(image, (x, y + int(h/2)), (x + w, y + int(h/2)), (156, 188, 24), 3)
            cv2.putText(image, "Diameter: {}".format(diameter), (cX - 50, cY - 50), cv2.FONT_HERSHEY_SIMPLEX, 3, (156, 188, 24), 3)
cv2.imwrite('...', image)
cv2.imwrite('...', thresh)
cv2.imwrite('...', opening)

0 个答案:

没有答案
相关问题