用opencv和python读取医学图片:mha
# -*- coding: utf-8 -*-
"""
Created on Sat Jan? 5 09:15:27 2019
@author: shenfangyuan
pip install SimpleITK
1,anxuexin.mha文件是(33,512,512)維的圖片,(通道數量=33,高=512,寬=512)
? 我只是選用了(21,:,:)這個通道的數據進行試驗.可以考慮 把各個通道數據"邏輯或",
? "邏輯與"等操作.數學上的sum累加"不是好方法"
2,anxuexin.mha每個通道i的數據(channel=i,512,512)是 "0--1"二進制數據,? ?
? 相當于true--false數據
3,anxuexin.mha數據類型dtype=np.unit16,注意這不是opencv常用的uint8類型
? 所以,送到opencv處理的時候最好先用np.unit8()函數進行轉換.
4,由于數據值域是0--1,相當于邏輯數據,為了用opencv正常顯示,需要乘以255,值域
? 變為0--255,變成黑白圖片.
5,plt 圖像處理軟件可以直接顯示0-1圖片
6,我們經常遇到的圖片像素的數據類型:
??? 1) 0--255 np.uint8:這種類型能夠被opencv直接處理
??? 2) 0.0--1.0? np.float類型的浮點數據,一般在圖像像素進行數值計算時候使用的類型
??? 3) true-1 ,false-0 :邏輯類型:需要轉換為0--255后才能顯示和存儲.
??? 4) 可以用 img > 127 這樣的邏輯表達式方法 大概判斷數據范圍
"""
import matplotlib.pyplot as plt
import numpy as np
import SimpleITK
import cv2
filename = 'anxuexin.mha' #文件名稱
img = SimpleITK.ReadImage(filename) #讀取文件內容
img_data = SimpleITK.GetArrayFromImage(img) #獲取文件中的圖片數據
img_tmp = np.zeros([512,512], dtype=np.uint8) #初始化一個512x512的緩沖區
#for i? in range(20,21):
#??? img_tmp = img_tmp + img_data[i,:,:]
img_tmp = img_data[21,:,:]
#從(33,512,512)數據中讀取 第21維數據到緩沖區.,你可以選"其他通道"
print('-----',np.sum(np.sum(img_tmp))) #用該方法,看看該是否為"空圖片"
img_tmp1 = np.uint8(img_tmp)*255
#把數據從uint16轉換為uint8,在把0--1轉換為0--255
#plt.imshow(img_tmp,cmap='gray') #plt軟件是可以直接顯示0--1數據的
cv2.imwrite('1.jpg',img_tmp1)? #將數據轉換為jpg格式保存起來
cv2.imshow('img_mha',img_tmp1)? #圖片顯示
cv2.waitKey(0)? #等待用戶輸入
cv2.destroyAllWindows()? #注銷顯示的窗口
總結
以上是生活随笔為你收集整理的用opencv和python读取医学图片:mha的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百钱买百鸡问题,Python编程解决
- 下一篇: Apriori算法通俗讲解