0

我对这种东西完全陌生,我使用 SLIC 从图像中获取超像素,现在我已经提取了检测到的单个超像素,但它就像整个起始 img 维度,除了有超像素,图像的其余部分是黑色,对不起,我的英语不好,我将在下面尝试解释。

import cv2
import numpy as np
from skimage.segmentation import slic

myimg = cv2.imread('4.5.jpg')
segments = slic(myimg, n_segments=200, compactness=10, sigma=1)



for i, segVal in enumerate(np.unique(segments)):


    mask = np.zeros(myimg.shape[:2], dtype = "uint8")
    mask[segments == segVal] = 255
    cv2.imwrite('output.png', cv2.bitwise_and(myimg, myimg, mask = mask))

    #show the masked region
    #cv2.imshow("Mask", mask)
    cv2.imshow("Applied", cv2.bitwise_and(myimg, myimg, mask = mask))
    cv2.waitKey(1)

这实际上是我获取超像素的代码,但是当我存储单个超像素时,我得到的是那个链接(我还不允许嵌入图像)

现在你可以看到原始图像和超像素的 H 和 W 有一个大的黑色区域,我希望只用超像素区域裁剪一个“矩形或正方形”,我该怎么做?谢谢你,对不起我的英语

4

1 回答 1

0

对于此任务,您可以使用cv2.findContours. 请参阅其文档以了解如何使用它。在找出在您的情况下只是一个轮廓后,您可以使用

x,y,w,h = cv2.boundingRect(cnt)

其中x,y是左上角的坐标,w,h是矩形的宽度和高度。现在我们可以知道所需重新排列的所有点,您可以使用 numpy 索引对其进行裁剪。

于 2020-04-29T10:10:18.977 回答