python opencv 如何求出轮廓中是否存在矩形
时间: 2023-10-07 07:06:53 浏览: 91
要判断轮廓中是否存在矩形,可以使用Python OpenCV中的cv2.approxPolyDP()函数和cv2.boundingRect()函数。
首先,使用cv2.findContours()函数来查找轮廓。然后,对于每个轮廓,使用cv2.approxPolyDP()函数来近似地计算其多边形,然后使用cv2.boundingRect()函数来计算其边界矩形。如果边界矩形的宽高比非常接近1,那么可以认为该轮廓是矩形。
下面是一个示例代码,可以检测出图像中所有的矩形轮廓:
```
import cv2
# 读取图像
image = cv2.imread("image.png")
# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 遍历每个轮廓
for contour in contours:
# 近似计算多边形
approx = cv2.approxPolyDP(contour, 0.01 * cv2.arcLength(contour, True), True)
# 计算边界矩形
x, y, w, h = cv2.boundingRect(approx)
# 如果边界矩形的宽高比非常接近1,认为该轮廓是矩形
if abs(w - h) < 10:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 显示图像
cv2.imshow("image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们首先读取图像,然后将其转换为灰度图像,并使用cv2.threshold()函数进行二值化处理。接下来,使用cv2.findContours()函数查找轮廓,并遍历每个轮廓。对于每个轮廓,我们使用cv2.approxPolyDP()函数进行多边形近似,然后使用cv2.boundingRect()函数计算其边界矩形。最后,我们判断边界矩形的宽高比是否非常接近1,如果是,则认为该轮廓是矩形,并使用cv2.rectangle()函数在原图像上绘制矩形。
阅读全文