求得不规则物体的长度

求得不规则物体的长度

在这里插入图片描述

解决方案:
skimage.morphology 中的 skeletonize 函数用于将图像中的物体转换为其骨架(skeleton)。骨架是一个由像素组成的细线结构,代表了图像中物体的主要形状。

from skimage.morphology import skeletonize
from skimage import data

# 读取图像
image = data.horse()

# 将图像转换为二值图像(灰度图像或彩色图像均可)
# 这里使用灰度图像作为示例
gray_image = image[:,:,0]

# 对二值图像应用骨架化操作
skeleton = skeletonize(gray_image)

# 显示原始图像和骨架化后的图像
import matplotlib.pyplot as plt

plt.figure(figsize=(8, 4))

plt.subplot(1, 2, 1)
plt.imshow(gray_image, cmap='gray')
plt.title('Original Image')
plt.axis('off')

plt.subplot(1, 2, 2)
plt.imshow(skeleton, cmap='gray')
plt.title('Skeletonized Image')
plt.axis('off')

plt.show()

具体应用举例:
Intercept为三通道或者二通道的图像数据

from                         skimage.morphology import skeletonize
def get_skeleton(blobs):
    """
    骨骼提取
    """
    skeleton = skeletonize(blobs)  # ndarray, 为TRUE的元素代表骨骼线的位置
    # skeleton_pts = np.argwhere(skeleton)
    return skeleton

length = 0
# 求skeleton
# Intercept为三通道或者二通道的图像数据
# Intercept_gray = cv2.cvtColor(Intercept, cv2.COLOR_RGB2GRAY)  # 转为灰度图
s_skeleton = get_skeleton(Intercept)
cv2.imshow("s_skeleton", s_skeleton)

# 将骨骼图转为灰度图
gqr_image_gray = cv2.cvtColor(s_skeleton, cv2.COLOR_RGB2GRAY)  # 转为灰度图
cv2.imshow("gqr_image_gray", gqr_image_gray)
cv2.waitKey(0)

s_contours, _ = cv2.findContours(gqr_image_gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

for s_contour in s_contours:
    length += cv2.arcLength(s_contour, True) / 2

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要得到一个不规则图形,glscenc使用的是计算机图形学中的一种技术——多边形剪裁。多边形剪裁是指对于一个给定的多边形图形,在给定的区域内进行裁剪,并得到一个不规则图形的过程。 glscenc首先需要定义一个给定的多边形图形,可以通过指定顶点坐标的方式来定义多边形的形状。然后,利用多边形剪裁算法,将该多边形图形裁剪为指定区域内的不规则图形。 多边形剪裁算法可以分为两种常用方法:内部-外部点测试算法和Cohen-Sutherland算法。 内部-外部点测试算法是通过检测多边形的每个顶点,判断其相对于裁剪区域的位置关系,确定多边形哪些部分位于区域内部,哪些部分位于区域外部。然后,根据求得的内部多边形顶点,通过连接相邻顶点的方式重新构造一个不规则图形。 Cohen-Sutherland算法是一种线段裁剪算法,通过将多边形的边看作线段,利用线段相交的判定来裁剪多边形图形。该算法首先将给定的多边形图形分解为多个线段,然后对每一个线段进行裁剪,得到新的线段边界。最后,根据新得到的线段边界,重新连接相邻线段的顶点,得到一个不规则图形。 通过上述算法,glscenc可以得到一个给定区域内的不规则图形,可用于计算机图形学中的各种应用,如图形渲染、图像处理等。 ### 回答2: 要得到一个不规则图形,可以通过以下步骤使用glscenc来实现。 第一步,创建一个窗口,并设置好窗口的大小和标题。可以使用glutInitWindowSize()函数来设置窗口大小,glutInitWindowPosition()函数来设置窗口位置,glutCreateWindow()函数来创建窗口。 第二步,设置绘图环境。在glscenc中,可以使用glClearColor()函数来设置背景颜色,glMatrixMode()函数来设置投影模式,glLoadIdentity()函数来设置当前的矩阵状态。 第三步,使用glBegin()和glEnd()函数来定义不规则图形的顶点。在glBegin()和glEnd()之间使用glVertex2f()函数来定义每个顶点的坐标。 第四步,使用glColor3f()函数来设置每个顶点的颜色。可以使用红、绿、蓝三个分量来定义颜色,取值范围为0到1。 第五步,使用glutMainLoop()函数来进入主循环,保持窗口的显示状态。 通过以上步骤,可以使用glscenc来得到一个不规则图形。可以根据需要,调整顶点的坐标和颜色,从而得到不同形状和效果的图形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值