cad二次开发中 如何获得实体最外层轮廓, 请以代码解释
时间: 2023-05-11 13:06:03 浏览: 83
在CAD二次开发中,可以通过以下代码获取实体最外层轮廓:
```
AcDbEntity* pEnt = ...; // 获取实体对象的指针
AcDbExtents extents;
pEnt->getGeomExtents(extents); // 获取实体的边界框
AcGePoint3d minPt = extents.minPoint();
AcGePoint3d maxPt = extents.maxPoint();
```
其中,`getGeomExtents`方法可以获取实体的边界框,`minPoint`和`maxPoint`方法可以获取边界框的最小点和最大点,从而得到实体最外层轮廓的范围。
相关问题
opencv 连续用两次findcontours函数找最外层轮廓为什么第二次找最外层轮廓的找出了全部的轮廓
这可能是因为在第一次查找轮廓时,您并没有使用正确的参数来选择要查找的轮廓类型。在OpenCV中,findContours函数的第三个参数是轮廓的检索模式,第四个参数是轮廓的近似方法。如果您在第一次调用findContours函数时使用了错误的检索模式,可能会导致第二次调用findContours函数时找到更多的轮廓。
建议您在第一次调用findContours函数时仔细检查参数,并确保使用正确的检索模式和近似方法来选择要查找的轮廓类型。如果您仍然无法解决问题,请提供更多的代码和细节,以便我更好地帮助您解决问题。
如何得到除最外层轮廓的内部轮廓 假设内部轮廓和最外层轮廓挨的很近 用python
可以使用OpenCV库来实现。首先,你需要使用cv2.findContours函数来找到所有的轮廓。然后,您可以使用cv2.hierarchy函数来获取每个轮廓的层次结构。最外层轮廓的层次结构是[1, -1, -1, -1],在这个结构中,第一个数字表示下一个轮廓,第二个数字表示前一个轮廓,第三个数字表示子轮廓,第四个数字表示父轮廓。子轮廓和父轮廓都是指针,指向层次结构数组中的另一个元素。如果子轮廓和父轮廓都是-1,则表示这是最外层轮廓。
因此,为了得到除最外层轮廓的内部轮廓,您可以迭代所有轮廓,检查它们的层次结构。如果子轮廓不是-1,则它是一个内部轮廓,可以将其加入到内部轮廓列表中。
以下是示例代码:
``` python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 获取所有轮廓
contours, hierarchy = cv2.findContours(gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 获取内部轮廓
inner_contours = []
for i in range(len(contours)):
if hierarchy[0][i][3] != -1:
inner_contours.append(contours[i])
# 在原始图像上绘制内部轮廓
cv2.drawContours(img, inner_contours, -1, (0, 0, 255), 2)
# 显示结果
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先使用cv2.findContours函数获取所有轮廓和层次结构。然后,我们迭代所有轮廓,如果它有父轮廓,则将其添加到内部轮廓列表中。最后,我们在原始图像上绘制内部轮廓,并显示结果。