資源簡介
本資源是將DICOM格式的CT圖用VTK讀取,轉給OpenCV處理并可視化。當中的操作比普通的圖片顯示要更困難(可看我的博文了解)。本程序只要配置好OpenCV和VTK環境即可成功運行,使用簡單方便。

代碼片段和文件信息
#include?
#include???//?當中含有_finddata_t
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
using?namespace?std;
using?namespace?cv;
//?讀入一個CT圖,返回它的像素矩陣,使用OpenCV的Mat類型返回
void?dicomread(string?inputFilename?Mat?&imgvtkSmartPointer?&reader)
{
????img.create(512512CV_32SC1);?
vtkSmartPointer?imageCast?=?
vtkSmartPointer::New();
????reader->SetFileName(inputFilename.c_str());
????reader->Update();
imageCast->SetInputConnection(reader->GetOutputPort());
imageCast->SetOutputScalarTypeToInt();
imageCast->Update();
//?圖像的基本信息
int?dims[3];
reader->GetOutput()->GetDimensions(dims);
//圖像的像素值
for(int?k=0;k {
????for(int?j=0;j {
????for(int?i=0;i {
????int*?pixel?=?
(int*)(imageCast->GetOutput()->GetScalarPointer(ijk));?//?第i列第j行的像素值
img.at(ji)?=?int(*pixel);?//?第j行第i列的像素值
}
}
}
}
void?showdicom(Mat?I)
{
double?maxx=0minn=0;
????double?*max?=?&maxx;
double?*min?=?&minn;
I.convertTo(ICV_64FC1);
minMaxIdx(Iminmax);
for(int?i=0;i {
????for(int?j=0;j {
????I.at(ij)?=?255*(I.at(ij)-minn)*1/(maxx-minn);
}
}
minMaxIdx(Iminmax);
for(int?i=0;i {
for(int?j=0;j I.at(ij)?=?(I.at(ij)-minn)*1/(maxx-minn);
}
//cout?< imshow(“DICOM?Image“I);
waitKey(0);
}
int?main()
{
????string?filename?=?“D:\\CT\\CT000895“;
????Mat?I1G1;
????vtkSmartPointer?reader?=?
vtkSmartPointer::New();
????//?讀入dicom圖
dicomread(filenameI1reader);
flip(I1I10);
//cout?< showdicom(I1);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????526948??2011-09-03?01:04??DicomReader\CT000895
?????文件????????2257??2017-06-21?10:55??DicomReader\dicomreader.cpp
?????目錄???????????0??2017-06-21?10:56??DicomReader\
- 上一篇:知乎小程序簡化版
- 下一篇:聯想啟天M6900原版BIOS
評論
共有 條評論