通过opencv对影像图进行处理,可实现:灰度图、自适应阀值分割、图像反色、图像扩展、消除小面积、图像细化、边缘检测、灰度图黑白颠倒等,期望能对医生读图起到一定的帮助。程序运行截图:

主程序test.py

# -*- coding: utf-8 -*-
'''
作者 : Python代码狂人
微信公众号 : Python代码大全
'''
import cv2
import numpy as np# 图像细化
def VThin(image, array):rows, cols = image.shapeNEXT = 1for i in range(rows):for j in range(cols):if NEXT == 0:NEXT = 1else:M = int(image[i, j - 1]) + int(image[i, j]) + int(image[i, j + 1]) if 0 < j < cols - 1 else 1if image[i, j] == 0 and M != 0:a = [0]*9for k in range(3):for l in range(3):if -1 < (i - 1 + k) < rows and -1 < (j - 1 + l) < cols and image[i - 1 + k, j - 1 + l] == 255:a[k * 3 + l] = 1sum = a[0] * 1 + a[1] * 2 + a[2] * 4 + a[3] * 8 + a[5] * 16 + a[6] * 32 + a[7] * 64 +  a[8] * 128image[i, j] = array[sum]*255if array[sum] == 1:NEXT = 0return imagedef HThin(image, array):rows, cols = image.shapeNEXT = 1for j in range(cols):for i in range(rows):if NEXT == 0:NEXT = 1else:M = int(image[i-1, j]) + int(image[i, j]) + int(image[i+1, j]) if 0 < i < rows-1 else 1if image[i, j] == 0 and M != 0:a = [0]*9for k in range(3):for l in range(3):if -1 < (i-1+k) < rows and -1 < (j-1+l) < cols and image[i-1+k, j-1+l] == 255:a[k*3+l] = 1sum = a[0]*1+a[1]*2+a[2]*4+a[3]*8+a[5]*16+a[6]*32+a[7]*64+a[8]*128image[i, j] = array[sum]*255if array[sum] == 1:NEXT = 0return imagearray = [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1,\1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,\0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1,\1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,\1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1,\0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1,\1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,\0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1,\1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,\1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,\1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0,\1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0]# 显示灰度图
img = cv2.imread(r"2.jpg",0)
cv2.imshow("img1",img)# 自适应阈值分割
img2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 17, 4)
cv2.imshow('img2', img2)# 图像反色
img3 = cv2.bitwise_not(img2)
cv2.imshow("img3", img3)# 图像扩展
img4 = cv2.copyMakeBorder(img3, 1, 1, 1, 1, cv2.BORDER_REFLECT)
cv2.imshow("img4", img4)contours, hierarchy = cv2.findContours(img4, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# 消除小面积
img5 = img4
for i in range(len(contours)):area = cv2.contourArea(contours[i])if (area < 80) | (area > 10000):cv2.drawContours(img5, [contours[i]], 0, 0, -1)
cv2.imshow("img5", img5)num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(img5, connectivity=8, ltype=None)
# print(stats)
s = sum(stats)
img6 = np.ones(img5.shape, np.uint8) * 0
for (i, label) in enumerate(np.unique(labels)):# 如果是背景,忽略if label == 0:# print("[INFO] label: 0 (background)")continuenumPixels = stats[i][-1]div = (stats[i][4]) / s[4]# print(div)# 判断区域是否满足面积要求if round(div, 3) > 0.002:color = 255img6[labels == label] = color
cv2.imshow("img6", img6)# 图像反色
img7 = cv2.bitwise_not(img6)# 图像细化
for i in range(10):VThin(img7, array)HThin(img7, array)
cv2.imshow("img7",img7)# 边缘检测
img8 = cv2.Canny(img6, 80, 255)
cv2.imshow("img8", img8)# 使灰度图黑白颠倒
img9 = cv2.bitwise_not(img8)
cv2.imshow("img9", img9)cv2.waitKey(0)

更多Python源代码,请微信关注:Python代码大全,

Python使用 opencv对CT图进行医学处理相关推荐

  1. Python 图像处理OpenCV:灰度图的非线性对数变换(笔记)

    灰度图的非线性对数变换,其中c为尺度比较常数,可以通过改变c来得到不同的图形效果. 代码如下: import cv2 as cv import numpy as np import matplotli ...

  2. python使用openCV把原始彩色图像转化为灰度图、使用矩阵索引的方式对数据数据进行剪裁(image cropping)

    python使用openCV把原始彩色图像转化为灰度图.使用矩阵索引的方式对数据数据进行剪裁(image cropping) 目录

  3. Python使用openCV把原始彩色图像转化为灰度图、使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本)、基于自适应阈值预处理(adaptive thresholding)方法

    Python使用openCV把原始彩色图像转化为灰度图.使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本).基于自适应阈值预处理(adaptive thresholding)方法 目录

  4. Practical Python and OpenCV 3rd Edition读书笔记_Chapter8_Smoothing and Blurring平滑与模糊_思维导图

    <Practical Python and OpenCV 3rd Edition>真的是一本非常棒的入门书籍. 它也很薄,只有166页,虽然是纯英文的,如果静下心来认真看一两天就可以读完. ...

  5. unet医学肺部ct图分割简单记录

    UNet医学图像分割 说明: 本项目采用pytorch--gpu--cuda11.6 本项目用的UNet网络架构 一.硬件: Windows GPU 二.软件环境安装: pytorch Nibabel ...

  6. 使用Python,OpenCV制作不同风格的素描图(正常,漫画,写实风格)

    使用Python,OpenCV制作不同风格的素描图(正常,漫画,写实风格) 这篇博客将介绍如何使用Python,OpenCV制作不同风格的素描图(正常风格,漫画风格,写实风格). 1. 效果图 原始图 ...

  7. 摄影爱好者玩编程:利用Python和OpenCV打造专业级长时曝光摄影图

    在本文中,我们将学习如何使用 OpenCV 和图像处理技术来模拟长时曝光图像.为了模拟长时曝光,我们采用了对一组图像取平均值的帧平均法.机器之心对该教程进行了简要的介绍. 长时曝光是摄影师最喜欢的摄影 ...

  8. python使用OpenCV加载图像为RGB图并可视化加载的图像(Convert to RGB and show image)

    python使用OpenCV加载图像为RGB图并可视化加载的图像(Convert to RGB and show image) 目录 python使用OpenCV加载图像为RGB图并可视化加载的图像( ...

  9. 使用Python,OpenCV创建动画GIF图和模因生成器

    在这篇博客中,我们将学习如何使用Python,OpenCV,dlib和ImageMagick工具箱创建动画GIF. 然后,您将结合所有这些技术,使用OpenCV构建一个模因生成器(眼镜

  10. python中opencv 与 PIL读图区别,以及与Numpy转换

    之前在图片预处理上就遇到过opencv和PIL,很纠结PIL读取的图片不好在opencv上使用,或者是opencv读取的图片不好在PIL上使用,以及它们如何转换为numpy类型.现在有时间,做个小实验 ...

最新文章

  1. python中内置的四种数值类型为_浅谈python语言四种数值类型
  2. 使用Python+OpenCV实现图像数据采集
  3. php 之mysqli简单封装
  4. 为什么在 Verilog HDL 设计中一定要用同步而不能用异步时序逻辑?
  5. 顺序队列的表示和实现
  6. java c s测试_将Zlib Java与C进行基准测试
  7. 浅谈C++类(6)--复制构造函数
  8. 当c语言表达式中同时有字符 整数,c语言第2章数据类型、运算符与表达式a.ppt
  9. HDFS源码解析:教你用HDFS客户端写数据
  10. 【英语学习】【Daily English】U08 Dating L04 We can Make it another time.
  11. 压缩文本、字节或者文件的压缩辅助类-GZipHelper 欢迎收藏
  12. Python爬虫编程实践 Task04
  13. deepfake 资源总结
  14. 安卓java游戏模拟器_Java手机游戏模拟器
  15. 微信小程序轮播图禁止滚动
  16. 每日一书丨金融反欺诈的底层逻辑
  17. xdg-open命令
  18. Android 子线程更新UI
  19. div是什么?标签?div+css
  20. 低秩矩阵RPCA MATLAB,低秩矩阵分解

热门文章

  1. 谷歌大牛Jeff Dean撰文:深度学习研究的黄金十年
  2. 数据流-移动超平面(HyperPlane)构造
  3. 开发中积累的单词800
  4. Tableau Server9.1.2 配置集群
  5. 【https】 1 HTTP Security (bb102-1)
  6. 《Revisiting Self-Supervised Monocular Depth Estimation》论文笔记
  7. 【STM32f401学习之路-02】USART串口通信
  8. 模块化笔记软件 Anytype 综合评测
  9. 单片机中段程序_80C51单片机中断的编程使用方法介绍
  10. 生活中的算法的实际举例_生活中的算法