CT扫描图像,其中的圆圈通过水泥基体相连。我想提取水泥基质的体积。但是,我无法使用分水岭算法找到完美的阈值来划分圆和水泥矩阵。 我也尝试过使用OpenCV HoughCircles和findContours来检测圆。但是结果足够完美。也许我对OpenCV不够熟悉。附件是我需要提取不同圆之间的胶结矩阵的图像。您应该可以用眼睛清楚地看到它。但是,圆检测算法似乎都不起作用。
请注意,我什至在这里查看并尝试了解决方案,因此它不是该问题的重复项:Opencv将接触的圈子划分为单个圈子。 enter link description here
另一种解决方案:OpenCV检测到带有噪声enter link description here的部分圆
这是我需要使用的源图像。
原始图片:
HoughCircles图片:
代码:
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()