您可能使用cv2.findContours()搜索轮廓,然后遍历它们在图像上绘制矩形。问题是你的图像不是由一条相连的线组成的,而是由许多虚线组成的。在
等高线是连接所有连续点的曲线(沿边界),具有相同的颜色或强度(OpenCV文档)。在
所以为了得到更好的结果,你应该在搜索轮廓之前先准备好你的图像。可以使用各种工具对图像进行预处理(可以搜索OpenCV文档)。在本例中,我将尝试使用一个小内核执行名为“closing”的过程。关闭是膨胀之后的像素腐蚀。它可以帮助连接你的小轮廓到一个大轮廓(圆)。然后可以选择最大的一个并绘制一个边框。在
示例:
输入图像:
import cv2
import numpy as np
img = cv2.imread('test.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
kernel = np.ones((3,3), dtype=np.uint8)
closing = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
_, contours, hierarchy = cv2.findContours(closing, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cnt = max(contours, key=