我对OpenCV 4中轮廓区域的计算存在疑问。我使用以下代码来计算轮廓区域:
gray2 = cv2.cvtColor(closing, cv2.COLOR_BGR2GRAY)
cnts1,_ = cv2.findContours(gray2, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
de1=cv2.drawContours(closing, cnts1, -1, (0, 0, 255), thickness=1)
ar = cv2.contourArea(cnts1)
#ar = cv2.contourArea(cnts1[0])
当我尝试启动代码时,总是收到错误消息:TypeError: Expected Ptr <cv::UMat> for argument 'contour'
。
当我将行ar = cv2.contourArea(cnts1)
更改为ar = cv2.contourArea(cnts1[0])
时,代码正在运行,但是ar
的结果为0
。没关系,因为cnts1[0]
只是轮廓线的一点。
但是,如何获得图片整个轮廓部分的面积?函数cv2.contourArea()
似乎只接受单点作为输入。
我很想念一些东西吗?
预先感谢:)。
欢呼
编辑: 更新了代码以遍历轮廓
gray2 = cv2.cvtColor(closing, cv2.COLOR_BGR2GRAY)
cnts1,_ = cv2.findContours(gray2, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
de1=cv2.drawContours(closing, cnts1, -1, (0, 0, 255), thickness=1)
r=len(cnts1)
r1=[]
for i in range(1,r):
ar1 = cv2.contourArea(cnts1[i])
r1.append(ar1)
print(r1)
ar = cv2.contourArea(cnts1[0])
print(ar)
输出:
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5678.5]
0.0