【问题标题】:find coordinate of object in a image after using grabcut (python)使用grabcut(python)后在图像中查找对象的坐标
【发布时间】:2018-06-11 19:24:00
【问题描述】:

我有很多龙虾图片(背景相同)。

我的目标是测量每只龙虾的大小。

为此,我使用 Grabcut 从背景中提取主要对象(龙虾)。但是,在这一步之后,我不知道如何找到提取对象的坐标以进行裁剪。我需要裁剪对象以支持尺寸测量。

我不知道是否:

  • 我们有任何直接的方法可以只将提取的对象保存到新图像中(刚好适合对象的大小),或者
  • 在执行 Grabcut 后找到它的坐标。

如果我们没有上述任何一种方法,如果您告诉我有关从 Grabcut 输出进行对象裁剪的其他方法,我将不胜感激。

这是原图

这是Grabcut之后的输出图片

输出图像的大小仍与原始图像相同。

我需要将提取的对象保存到足够适合对象大小的新图像中。

【问题讨论】:

    标签: python image-processing crop


    【解决方案1】:

    您需要一些来自 OpenCV 库的名为 min Bounding Rectangle 的东西。它形成一个最小的矩形并给出矩形的坐标。

    Bounding Rect : 它给出了未旋转的矩形(绿色矩形)

    x,y,w,h = cv2.boundingRect(cnt)
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
    

    Rotated Bounding Rect : 它给出了旋转的边界矩形(红色矩形)

    rect = cv2.minAreaRect(cnt)
    box = cv2.boxPoints(rect)
    box = np.int0(box)
    cv2.drawContours(img,[box],0,(0,0,255),2)
    

    Image from OpenCV

    之后,您可以获取坐标并提取带有龙虾的矩形。

    【讨论】:

    • 感谢 user3808268 的快速回复。我已将您的解决方案与以下代码用于上面的 Grabcut 输出图像: import cv2 import numpy as np img = cv2.imread('output.jpg',0) print (img.shape) ret,thresh = cv2.threshold( img,127,255,0) ,contours, = cv2.findContours(thresh, 1, 2) im2,contours,hierarchy = cv2.findContours(thresh, 1, 2) cnt = contours[1500] x,y,w,h = cv2.boundingRect(cnt) print(x, y, w, h) cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)crop_img = img[ y:y+h, x:x+w] cv2.imshow("Crop",crop_img) cv2.waitKey(0)
    • 当我运行上面的代码时,我无法得到想要的结果。第一个问题是它不显示绿色矩形。我不知道为什么。第二个问题是,当我采用 x,y,w,h 的值进行裁剪时,它显示的区域完全错误,而且非常小。原因是 w 和 h 的值非常小,我也不知道为什么。我还意识到,来自 cv2.findContours(thresh, 1, 2) 的“轮廓”输出包含大量值。请帮我。谢谢。
    • 嘿,你需要对grab-cut的输出进行二值化(黑白)->然后应用dilation and erosion(这将删除小的x,y,w,h)->然后应用轮廓 -> 然后使用这些 x,y,w,h 值提取龙虾。要显示矩形,您必须执行以下操作: img_with_rect = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) 然后执行 cv2.imshow("Image带矩形”,img_with_rect)。
    • 先腐蚀,再膨胀,它会去除干扰点并修复小xywh问题(它的输入是一个二值化图像(黑白)) eroded_img = cv2.erode(black_white_img, None,迭代=5) dilated_img = cv2.dilate(eroded_img, 无, 迭代=3)
    • 太好了。您的解决方案完美运行。感谢您的指导。
    猜你喜欢
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2015-08-25
    • 2020-02-12
    • 1970-01-01
    • 2019-04-26
    • 2019-03-12
    • 2020-10-05
    相关资源
    最近更新 更多