import cv2
import numpy as np
image = cv2.imread('blob.png', cv2.IMREAD_GRAYSCALE)
# Make sure image is binary (the one you posted was not, probably due to interpolation)
_, image = cv2.threshold(image, 50, 255, cv2.THRESH_BINARY)
# Find top left and bottom right coords for non-background pixels
active_pixels = np.stack(np.where(image))
top_left = np.min(active_pixels, axis=1).astype(np.int32)
bottom_right = np.max(active_pixels, axis=1).astype(np.int32)
# Plot them
for keypoint in [top_left, bottom_right]:
y, x = keypoint
cv2.drawMarker(image, (x, y), 255, markerType=cv2.MARKER_TILTED_CROSS,
markerSize=10, thickness=2)
cv2.imshow('image', image)
cv2.waitKey(0)
如果您想尝试一个基于numpy的实现。你知道吗
输出:
下面是在Python/OpenCV中获取对象边界的角点的另一种方法。你知道吗
输入:
点(x,y坐标):
阈值图像:
已清除的重建图像:
图像上的边界框:
在图像上绘制的点:
实现这一点的一种方法是使用^{} 。你知道吗
假设您的输入仅由
1
和0
组成,代码如下:实际上
find_object()
更为复杂,可以用于不同的标签,请查看其文档,了解如何在不同的场景中使用它的更多信息。你知道吗如果您的输入不是二进制的,您可以使用比较使其成为二进制的,例如
arr > 0
将产生一个布尔数组(假设arr
是NumPy数组)。你知道吗相关问题 更多 >
编程相关推荐