不规则热力图生成之凹轮廓(以手形云图为例)

1问题描述

在绘制不规则的热力图时,我撰写了以下的博客供大家参考:
异形热力图的绘制(以鞋垫上的柔性压力传感器阵列离散点绘制足部压力热力图为例)
但是我在用的时候发现了一些小问题,博客中用的足形是凸轮廓,生成的云图没有问题,但是在应用到如下所示的手型图时,就发现出了bug,如中间图所示,后续我采取了在图像上加了一层蒙版的方法予以解决,绘制出来的手型云图如右边图所示。
在这里插入图片描述

1. 导入所需库

首先,我们需要导入必要的库:

import cv2
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
from matplotlib.path import Path
  • cv2:用于图像处理。
  • numpy:用于数值计算。
  • matplotlib:用于绘图。
  • scipy:用于插值计算。

2. 提取离散轮廓点

接下来,我们定义一个函数来提取图像中的离散轮廓点:

def get_discrete_points(image_path, n=1, spacing=10):
    image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
    _, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY_INV)
    contours, _ = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

    all_contour_points = []
    for i, contour in enumerate(contours[:n]):
        discrete_points = []
        for j in range(0, len(contour), spacing):
            point = contour[j][0]
            discrete_points.append((point[0], point[1]))
        all_contour_points.append(discrete_points)
    
    return all_contour_points

代码说明

  • 读取图像:将图像转换为灰度图。
  • 二值化:将轮廓转换为二值图像,黑色轮廓为 0,背景为 255。
  • 查找轮廓:使用 cv2.findContours 函数找到所有轮廓。
  • 离散化轮廓点:每隔 spacing 个点抽取一个,生成离散点集。

示例调用

image_path = r'\Snipaste_2024-09-30_11-01-01.jpg'
n_contours = 34
spacing = 50

contour_points_list = get_discrete_points
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值