opencvpython计算一组轮廓的二阶矩

2024-05-16 11:46:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想计算一幅有大量轮廓的图像的二阶矩和体积分数。 为了解决我的问题,我一直在研究cv2.findcontours函数和cv2.connectedComponents,但是没有成功。 这是目标图像:image with a huge number of contours,但我创建下面的图像作为示例:image as example 例如,在三角形1上,它的体积分数为零,力矩为0;在三角形2上,体积分数为100%,力矩最大;在三角形3上,体积分数可能为体积分数的30%,力矩未知,依此类推。在

我认为这将是有用的使用image只包含三角形,然后使用两者。 如果我使用findCountour,我会得到所有的轮廓,而不仅仅是三角形。 如果我使用connectedComponents,我不会得到所有的三角形。 我将在这里放一点代码,但我认为这并不重要,我的主要困难是问题解决方法。在

#!/usr/bin/python
import cv2
import numpy as np

imMesh = cv2.imread('testLayer6_.png', -1)
imTriangles = cv2.imread('new_refined2__DXF.png', -1)

imGrayMsh = cv2.cvtColor(imMesh, cv2.COLOR_BGR2GRAY)
(thresh, imMesh_bw) = cv2.threshold(imGrayMsh, 128, 255,
                                  cv2.THRESH_BINARY | cv2.THRESH_OTSU)
imGrayTri = cv2.cvtColor(imTriangles, cv2.COLOR_BGR2GRAY)
ret, imTri_bw = cv2.threshold(imGrayTri, 250, 255, cv2.THRESH_BINARY)
connectivity = 4
output = cv2.connectedComponentsWithStats(imTri_bw, connectivity, cv2.CV_32S)
num_labels = output[0]
labels = output[1]
stats = output[2]
centroids = output[3]

_, contours, hier_ = cv2.findContours(imTri_bw, cv2.RETR_TREE,
                                  cv2.CHAIN_APPROX_SIMPLE)

我希望你能帮我解决这个问题!在


Tags: 图像imageoutput体积cv2分数轮廓bw