图像处理:如何使用opencv

时间:2019-02-22 08:55:28

标签: opencv

CT扫描图像,其中的圆圈通过水泥基体相连。我想提取水泥基质的体积。但是,我无法使用分水岭算法找到完美的阈值来划分圆和水泥矩阵。 我也尝试过使用OpenCV HoughCircles和findContours来检测圆。但是结果足够完美。也许我对OpenCV不够熟悉。附件是我需要提取不同圆之间的胶结矩阵的图像。您应该可以用眼睛清楚地看到它。但是,圆检测算法似乎都不起作用。

请注意,我什至在这里查看并尝试了解决方案,因此它不是该问题的重复项:Opencv将接触的圈子划分为单个圈子。 enter link description here

另一种解决方案:OpenCV检测到带有噪声enter link description here的部分圆

这是我需要使用的源图像。

原始图片:

enter image description here

HoughCircles图片:

enter image description here

代码:

enter code here
import cv2
import numpy as np

def houghdetect(image,img):
    circles = cv2.HoughCircles(image, cv2.HOUGH_GRADIENT, 1, 50, param1 = 20, param2 = 27, minRadius = 25, maxRadius = 50)
    circles = np.uint16(np.around(circles))

    for i in circles[0, 1:]:
        cv2.circle(img, (i[0], i[1]), i[2], (0, 0, 255), 2)

    cv2.namedWindow('detect_circle', 0)
    cv2.resizeWindow('detect_circle', 699, 575)
    cv2.imshow('detect_circle', img)     


img = cv2.imread('C:\THU\python\learn\outputtif\\5.jpg')
dst = cv2.GaussianBlur(img, (3,3), 0)
gray = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)
ret, threshold = cv2.threshold(gray, 135, 255, cv2.THRESH_TOZERO)

Gthreshold = cv2.GaussianBlur(threshold, (5,5), 0)
cv2.namedWindow('Gthreshold', 0)
cv2.resizeWindow('Gthreshold', 699, 575)
cv2.imshow("Gthreshold", Gthreshold)
houghdetect(Gthreshold, img)

cv2.waitKey()
cv2.destroyAllWindows()

0 个答案:

没有答案