使用opencv如何获得图像的第二亮区域?

时间:2016-03-08 20:50:55

标签: python c++ image opencv image-processing

我目前正试图检测两者;杯子和青光眼图像的圆盘。他们从图像的其余部分中脱颖而出的方式是它们比图像的其余部分更亮。但杯子比光盘更亮,所以我只能检测杯子。我想要实现的是,包围两者;杯子和圆盘有两个不同的圆圈。杯子是最亮的图像,并且是第二亮的。我以前怎么做呢?

这是我的代码(只检测杯子并环绕它。我试图检测它们;杯子和圆盘,用不同的圆圈环绕它们。)

image = cv2.imread(args["image"])
orig = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

gray = cv2.GaussianBlur(gray, (args["radius"], args["radius"]), 0)
(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray)
image = orig.copy()
cv2.circle(image, maxLoc, args["radius"], (255, 0, 0), 2)

cv2.namedWindow("Test", cv2.WINDOW_NORMAL)
cv2.imshow("Test", image)
cv2.waitKey(0)

我也试图在没有手动输入半径的情况下这样做。如果您对此有所了解,请分享。

这是青光眼的样本图像。圆圈中最亮的部分是杯子,围绕它的较大圆圈是圆盘。Here's a sample image of a Glaucoma showing cup and disc.

1 个答案:

答案 0 :(得分:0)

我在使用某种颜色跟踪对​​象时遇到了类似的问题。我的方法是下一个:

  1. 使用threshold,设法创建一切都是黑色的图像 - > 0和圆盘和杯子是白色的 - > 255
  2. 使用moments完成该部分后,您可以自动计算
  3. In my repository我有一些代码(虽然它是C ++,因为它是一个ROS项目),我使用它来跟踪蓝色对象。

    使用阈值和力矩的优势在于,如果您的图像稍微转动,使用缩放甚至移动,您仍然可以跟踪所需的对象并计算半径,中心等元素

    希望这能帮到你!