对于find contour提取到的不闭合的轮廓,如何变成密闭的轮廓,并对应的面积值输出,python代码
时间: 2024-06-10 15:05:15 浏览: 87
可以通过利用cv2.drawContours()函数来绘制轮廓,并设置thickness参数为-1,即可将轮廓填充为实心。同时,可以通过cv2.contourArea()函数来计算轮廓的面积值。
下面是一个python实现的例子:
```
import cv2
# 读取图像并进行边缘检测
img = cv2.imread("image.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 提取轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓并计算面积
for i, contour in enumerate(contours):
# 绘制实心轮廓并输出面积
area = cv2.contourArea(contour)
cv2.drawContours(img, [contour], -1, (0, 255, 0), -1)
print("Area", i, ":", area)
# 显示结果
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
注意,此处绘制轮廓时,只处理了第一个轮廓,如果有多个轮廓,需要对每个轮廓进行处理。
相关问题
对于find contour提取到的不闭合的轮廓,如何让其确保变成密闭的轮廓,并对应的面积值输出,python代码
可以使用cv2.approxPolyDP()函数来对轮廓进行多边形拟合,然后使用cv2.drawContours()函数来画出图像中的轮廓,同时返回该轮廓的面积值。以下是示例代码:
```
import cv2
# 读入图像
img = cv2.imread('image.png')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 寻找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# 遍历每个轮廓
for contour in contours:
# 进行多边形拟合
approx = cv2.approxPolyDP(contour, 3, True)
# 绘制轮廓
cv2.drawContours(img, [approx], 0, (0, 255, 0), 2)
# 计算面积
area = cv2.contourArea(contour)
print('面积为:', area)
# 显示结果
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,cv2.approxPolyDP()函数的第二个参数表示轮廓周长与拟合多边形周长之间的最大距离,第三个参数表示是否闭合。cv2.drawContours()函数的第四个参数为绘制的颜色,最后一个参数为线宽。
对于find contour提取到的轮廓,怎么确保轮廓一定是密闭的,并对应的面积值输出,python代码
下面是对于find contour提取到的轮廓,确保轮廓一定是密闭的,并对应的面积值输出的Python代码:
```
import cv2
# 读取图像
img = cv2.imread("image.jpg")
# 转为灰度图像
gray = cv2.cvtColor(img, 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 i in range(len(contours)):
# 判断轮廓是否闭合,如果不闭合则跳过
if not cv2.isContourConvex(contours[i]):
continue
# 计算轮廓面积
area = cv2.contourArea(contours[i])
# 输出轮廓面积
print("Contour Area:", area)
```
这段代码首先读取图像,然后将其转为灰度图像并进行二值化处理。接着使用cv2.findContours()函数查找图像中的轮廓,并遍历每个轮廓。对于每个轮廓,使用cv2.isContourConvex()函数判断其是否闭合,如果不闭合则跳过。如果轮廓是闭合的,则使用cv2.contourArea()函数计算轮廓面积,并输出面积值。这样就可以确保每个轮廓都是闭合的,并得到对应的面积值了。
阅读全文