通过python中的skimage.mark_boundary可以标记边界,如何返回对应的框选方框坐标
时间: 2024-03-22 08:39:22 浏览: 60
skimage.mark_boundary函数是用于在图像中标记边界的,它不会返回框选方框坐标。但是,可以通过一些方法来获取框选方框坐标。以下是一种可能的方法:
1. 使用skimage.find_contours函数查找边界的轮廓。
2. 对轮廓进行多边形拟合,得到一个矩形框。
3. 获取矩形框的坐标。
下面是使用这种方法的示例代码:
``` python
from skimage import io, measure
import numpy as np
# 读取图像
image = io.imread('image.jpg')
# 标记边界
boundary = measure.find_contours(image, 0.8)[0]
# 对边界进行多边形拟合,得到一个矩形框
poly = np.array([boundary])
rect = cv2.boxPoints(cv2.minAreaRect(poly))[0]
# 获取矩形框的坐标
x1, y1 = rect[0]
x2, y2 = rect[2]
```
这里,我们使用了skimage.measure.find_contours函数来查找边界轮廓,然后使用cv2.minAreaRect函数对轮廓进行多边形拟合,得到一个矩形框。最后,我们获取矩形框的左上角和右下角坐标,即可得到框选方框坐标。
相关问题
python中的skimage.mark_boundary如何返回对应方框坐标
`skimage.mark_boundary` 函数主要用于在图像中标记边界。该函数的返回值是一个 uint8 类型的数组,表示标记了边界的图像。如果您需要获取该边界的坐标,可以使用 `skimage.measure.find_contours` 函数来进行计算。
具体来说,可以像这样使用 `find_contours` 函数:
```python
import numpy as np
from skimage import measure
# 生成一个随机的标记了边界的图像
image = np.zeros((50, 50), dtype=np.uint8)
image[10:40, 10:40] = 255
image = skimage.mark_boundary(image, color=(255, 0, 0))
# 使用 find_contours 函数获取边界的坐标
contours = measure.find_contours(image[:, :, 0], 0.5)
for contour in contours:
print(contour)
```
这里我们生成一个随机的标记了边界的图像,然后使用 `find_contours` 函数获取其边界的坐标,并将其打印出来。请注意,`find_contours` 函数需要传入二值化后的图像,因此我们需要将彩色图像的一个通道取出来,以便进行计算。
skimage.segmentation的mark_boundary如何画方框计算长宽
`skimage.segmentation.mark_boundary`函数是用来在图像上标记出分割边界的,它并不会画方框或计算长宽。如果您想要画方框并计算长宽,可以使用下面的代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from skimage import segmentation
# 读入图像
image = plt.imread('image.png')
# 做分割
labels = segmentation.slic(image, compactness=30, n_segments=400)
# 画出边界
boundary = segmentation.mark_boundaries(image, labels, color=(1, 0, 0))
# 找到最小外接矩形的左上角坐标、宽度和高度
regions = segmentation.find_boundaries(labels)
nonzero_rows, nonzero_cols = np.nonzero(regions)
x, y = np.min(nonzero_cols), np.min(nonzero_rows)
width, height = np.max(nonzero_cols) - x, np.max(nonzero_rows) - y
# 在图片上画出最小外接矩形
plt.imshow(boundary)
plt.plot([x, x+width], [y, y], 'r', linewidth=2)
plt.plot([x+width, x+width], [y, y+height], 'r', linewidth=2)
plt.plot([x+width, x], [y+height, y+height], 'r', linewidth=2)
plt.plot([x, x], [y+height, y], 'r', linewidth=2)
plt.show()
# 输出长宽
print('width:', width)
print('height:', height)
```
这里使用了`skimage.segmentation.find_boundaries`函数找到分割边界,然后找到最小外接矩形的左上角坐标和宽度、高度。最后使用`matplotlib`画出最小外接矩形。
阅读全文