使用Python实现计算DICOM图像两点真实距离

 更新时间:2023年11月24日 08:43:25   作者:Alex-Leung  
这篇文章主要为大家详细介绍了如何使用Python实现计算DICOM图像两点真实距离,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

对比测量结果图

DICOM阅读器(小赛看看)测量结果

python测量结果

代码

import numpy as np
import cv2
import math
import pydicom
from pydicom.pixel_data_handlers.util import convert_color_space

ds = pydicom.dcmread("./your_dicom_path.dcm")
# 第几张图, dtype根据Bits Allocated定义
img = np.asarray(ds.pixel_array[0], dtype='uint8')
# 获取色彩空间
color_space = ds.get(0x00280004).value
# 颜色空间转换
img = convert_color_space(img, color_space, 'RGB')
# BGR转RGB
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 像素和真实空间比例尺
autio_x = ds.get(0x00280030).value[0]
autio_y = ds.get(0x00280030).value[1]

p1 = None
p2 = None

# 欧股定理
def cal_euler(p1, p2):
    a2 = ((p2[1] - p1[1]) * autio_x) ** 2
    b2 = ((p2[0] - p1[0]) * autio_y) ** 2
    res = math.sqrt(a2 + b2)
    return res

# 鼠标事件
def mouseHandler(event, x, y, flags, param):
    global p1, p2
    if event == cv2.EVENT_LBUTTONDOWN:
        point = (x, y)
        if p1 == None:
            p1 = point
        else:
            p2 = point
        print(point)
        cv2.destroyAllWindows()

cv2.namedWindow('p1')
cv2.setMouseCallback('p1', mouseHandler)
cv2.imshow('p1', img)
cv2.waitKey()

cv2.namedWindow('p2')
cv2.setMouseCallback('p2', mouseHandler)
cv2.imshow('p2', img)
cv2.waitKey()

res = cal_euler(p1, p2)

img = cv2.line(img, p1, p2, (0, 0, 255), 1, 1)
cv2.putText(img, str(round(res, 2)) + "mm", p2, cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 1, cv2.LINE_AA)
cv2.imshow('res', img)
cv2.waitKey()

到此这篇关于使用Python实现计算DICOM图像两点真实距离的文章就介绍到这了,更多相关Python计算图像两点距离内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 关于模块和加载模块的实现

    Python 关于模块和加载模块的实现

    这篇文章主要介绍了Python 关于模块和加载模块的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 通过Python实现控制手机详解

    通过Python实现控制手机详解

    如今python是非常多人学习的,而手机也几乎人手一部。对于很多Python学习者,想用python来完成android手机中各种炫酷的的控制,adb是必不可缺少的工具之一
    2021-10-10
  • Python自动重试HTTP连接装饰器

    Python自动重试HTTP连接装饰器

    这篇文章主要介绍了Python自动重试HTTP连接装饰器,有时候我们要去别的接口取数据,可能因为网络原因偶尔失败,为了能自动重试,写了这么一个装饰器,可以实现自动重连2次,需要的朋友可以参考下
    2015-04-04
  • django里面的forms模块详解

    django里面的forms模块详解

    这篇文章主要介绍了django里面的forms模块详解的相关资料,需要的朋友可以参考下
    2023-11-11
  • python脚本开机自启的实现方法

    python脚本开机自启的实现方法

    今天小编就为大家分享一篇python脚本开机自启的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python使用遗传算法解决最大流问题

    Python使用遗传算法解决最大流问题

    这篇文章主要为大家详细介绍了Python使用遗传算法解决最大流问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Python 实现打印单词的菱形字符图案

    Python 实现打印单词的菱形字符图案

    这篇文章主要介绍了Python 实现打印单词的菱形字符图案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python使用for循环和海龟绘图实现漂亮螺旋线

    python使用for循环和海龟绘图实现漂亮螺旋线

    这篇文章主要为大家介绍了python使用for循环和海龟绘图实现漂亮螺旋线实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python vtk读取并显示dicom文件示例

    Python vtk读取并显示dicom文件示例

    今天小编就为大家分享一篇Python vtk读取并显示dicom文件示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python文件及目录操作实例详解

    Python文件及目录操作实例详解

    这篇文章主要介绍了Python文件及目录操作的方法,实例分析了Python中os模块的使用技巧,需要的朋友可以参考下
    2015-06-06

最新评论