A. 哪有DICOM 开发包(SDK)下载啊如题 谢谢了
[系统/软件/源码/控件] DICOM 开发包(SDK) DICOM 是 Digital Imaging and Communications in Medicine的英文缩写,即医学数字成像和通信标准。是 ACR (American College of Radiology , 美国放射学会) 和 NEMA (National Electrical Manufactorers Association , 美国国家电子制造商协会) 为主制定的用于数字化医学影像传送、显示与存储的标准。在DICOM标准中详细定义了影像及其相关信息的组成格式和交换方法,利用这个标准,人们可以在影像设备上建立一个接口来完成影像数据的输入/输出工作。DICOM标准以计算机网络的工业化标准为基础,它能帮助更有效地在医学影像设备之间传输交换数字影像,这些设备不仅包括CT、MR、核医学和超声检查,而且还包括CR、胶片数字化系统、视频采集系统和HIS/RIS信息管理系统等。 VIDI-WebPacsSDK包括完整的DICOM服务器和WebDicomViewer.ocx,您可以轻松建立PACS系统。 WebPacs的SDK适用VB、VB.NET、VC++、DELPHI、C++ Builder、PB、WEB开发平台,风险投资小,可快速建立PACS系统的HTML。 控件特点: 完全符合DICOM标准,采用DICOM协议,互联网采用WADO协议 完全的PACS系统的功能。 包含WorkLIST(工作列表)功能 具有扫描图像并转换为DICOM标准格式功能。 具有接入其他图像格式并转换为DICOM标准格式功能 具有刻录的CD / DVD功能。 具有关键图标记功能。 支持Store SCP传输(DICOM文件接收) 支持Store SCU传输(DICOM文件发送) 支持Query/Retrive服务(DICOM查询取回) DICOM标准打印协议 DicomVCL为16位图像。 具有三维重建功能(容积再现,表面绘制和三维投影)。 视频捕获并转换为DICOM标准格式 查看各类DICOM图像 查看BMP、JPG图像 对DICOM、BMP、JPG图像进行窗宽/窗位调节 将DICOM图像转换成BMP、JPG或TIFF图像 将BMP、JPG图像转换成DICOM图像(支持灰度及RGB模式) 将多张BMP、JPG图像转换成一个多帧DICOM图像 将非DICOM图像转换成DICOM图像时可设置病人姓名、ID等参数 DICOM图像支持测量操作(长度、角度、面积等) 支持图像处理功能(反色、伪彩、翻转、去噪、锐化等) 查看多帧DICOM图像、可进行视频播放 多帧DICOM图像可进行图像分布(多张图像平铺) 多帧DICOM图像可直接转换成AVI视频文件 提供图像流输出(可直接将图像放入Image控件) 可将控件放入HTML网页中 WebDicomViewer ,可以让您访问互联网DICOM标准的图像。 详细地址: http://bbs.hc3i.cn/thread-21247-1-13.html
希望采纳
B. android 开发DICOM, 想要用dcmtk 怎么编译成jar
目前,比较流行的java反编译工具有近30种,其中有三款堪称精品:一、应用广泛的JAD在众多的JAVA反编译工具中,有几种非常着名的工具使用了相同的核心引擎——JAD,其中主要包括:FrontEndPlus、mDeJava、DecafePro、CavajJavaDecompiler、DJJavaDecompiler、NMI’sJavaClassViewer和国产的JAVA源代码反编译专家。JAD本身是一个命令行工具,没有图形界面,上述的这些工具大多是在JAD内核的基础之上加了一个图形界面而已。这么多种产品的共同选择,足可证明JAD在JAVA反编译领域中的尊贵地位。JAD是使用MicrosoftVisualC++开发的,运行速度非常快,可以处理很复杂的JAVA编译文件。众多的参数使JAD可以灵活应付多种加密手段,令反编译的代码更加优化和易读。由于JAD参数太多,没必要一一解释,其中有几个最常用的如下(以JAD1.5.8f版本为例):-d-用于指定输出文件的目录-s-输出文件扩展名(默认为:.jad),通常都会把输出文件扩展名直接指定为.java,以方便修改的重新编译。-8-将Unicode字符转换为ANSI字符串,如果输出字符串是中文的话一定要加上这个参数才能正确显示。最常用的反编译指令如下所示:Jad–dc:\javasource–s.java-8javatest.class这条指令将当前目录下的javatest.class反编译为javatest.java并保存在c:\javasource目录里,其中的提示输出为中文,而不是Unicode代码。二、源码开放的JODEJODE是全球最大的开源项目网站Sourceforge.net的成员,在所有的JAVA反编译器中,JODE的反编译效果是最好的,尤其是对付一些常见的加密手段,例如混淆技术等,更是出类拔粹。JODE本身也是纯JAVA开发的,最近越来越多的JAVA反编译软件也选择JODE来做它们的核心引擎,例如JCavajJavaDecompiler、BTJ(BackToJava)、jEdit’sJavaInsightplugin等。JODE是一个可运行的JAR文件,在windows环境下双击即可运行。需要特别说明的是,JODE不是通过常规的Open->File的方式来加载JAVA编译后的类文件(*.class)或是类包(*.jar)的,而是通过在Options菜单中的SetClasspath来实现的,单独的类文件可以将它的上一级目录作为Classpath输入,然后再选择ReloadClasspath即可。新加入的类包或是类的名字会在左侧窗口出现,双击类包名可以目录树结构,双击需要反编译的类名则在右上角的窗口中直接显示反编译后的源代码。三、独树一帜的DAVADAVA不是一个独立的JAVA反编译器,而是JAVA代码优化工具Soot的一部分。Soot和JODE一样是纯JAVA开发的,也是一个独立的JAR包,但却不能通过双击直接运行,而是象JAD一样在命令行状态运行。Soot对环境变量的配置要求非常严格,通常情况下要对CLASSPATH做如下设置:SetCLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;其中的c:\sootdir\是下载的soot类包放置的路径,CLASSPATH末尾的.;代表了当前目录,如果不加上这个的话Soot经常会报一个找不到类的错误。DAVA是作为Soot的一个参数使用的,通常的用法如下:Javasoot.Main–fdava–dc:\javasourcejavatest注意最后的类名不用带.class后缀,因为它默认是处理class文件,这个操作与前述的JAD的参数效果相同。DAVA采取了流程优化的方式进行反编译,与传统反编译思路不尽相同,但却对改变流程类的加密方法有独特的反编译效果。上述的三种工具各有千秋,但效果都非常不错。经测试,它们基本上都可以把JDK自带的一些例程完全反编译,然后不加任何修改可再编译成功,并能正常运行!
C. DICOM是什么文件
医疗设备如CT和MRI的图像保存格式,DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息的国际标准。
DICOM格式数据可以用Amira等软件读取并进行三维展示。
D. 高分求C#编的解析DICOM的源代码
虽然不太懂Dicom的专业知识, 但是Github上有一个开源的fo-dicom, 是C#的 可以了解下
E. 求DICOM转换到BMP图像的VB源代码
16日 星期二 11:04 目的 探讨DICOM图像转换成BMP图像的方法,以便于对DICOM图像进行读取、处理、存贮。方法 分析DICOM图像和BMP图像文件格式,读取DICOM图像数据并进行加窗显示、垂直镜像变换,以BMP格式存储。结果 此方法实现了DICOM图像到BMP图像的转换。结论 多数的计算机没有读取DICOM图像的软件,转换为BMP图像后几乎所有的计算机均可读取图像。
DICOM;BMP;加窗显示
Translating from DICOM image into BMP imageWANG Shi-gang , LI Yue-qing , WANG Chang-yuan(Taishan Medical College, Taian 271000,China)
Abstract:Objective: To explore the method of translating the DICOM image into BMP one in order to read, process and memorize the DICOM image. Methods:The structures of DICOM image and BMP one were analyzed; the data of DICOM image were read with the window displayed; plumb mirror were transformed and memorized in the format of BMP image. Results: The DICOM image was translated into BMP one by this method. Conclusion: The majority of computers are not provided with the software that can read DICOM image, but almost any computers can read the translated image in the format of BMP.
Key words:DICOM; BMP; window display
医学数字成像与通讯(digital imaging and communication in medicine,DICOM)标准的应用促进了医学影像设备之间的互操作性,提供了一种用于医学信息的开放性的数据交换标准,使得不同厂商生产的影像设备形成的图像统一存档与通讯成为可能,加快了图像存档与通讯系统(picture archiving and communication systems,PACS)的发展;但是大多数图像处理软件都不支持DICOM图像文件格式,所以要处理DICOM图像文件必然要对其进行格式转换,而BMP格式图像是应用最广泛的一种图像文件格式,且Windows操作系统带有BMP图像处理软件——画图。因此,将DICOM图像转换成BMP图像是非常必要的。
1 材料与方法
1.1 材料
胜利油田中心医院somatom sensation 16CT DICOM图像、Windows2000操作系统、Microsoft Visual C++ 6.0编程软件。
1.2 方法
1.2.1 DICOM文件格式 DICOM图像由文件信息头和至少一个图像数据集合组成。DICOM文件格式见图1,其文件头是可选的,其中前同步码长128Bytes,没有结构,不能作为数据元编码,它的存在是为了提供一些通用计算机文件格式的兼容性,文件的说明信息应该放在前同步中,如文件的传输格式,生成该文件的应用程序等等。当一个文件被切割成多个部分(例如用多张盘存储一个文件时),文件头可以存放随机访问图像所需要的信息。当文件头没有被使用时,它应该设为全零,即128Bytes的00H。前缀长4Bytes,为大写字符“DICM”,可以根据该值来判断一个文件是否为一个DICOM文件〔1~4〕。
图1 DICOM文件格式
数据集合由数据元素组成,是数据元素的有序集合,它不仅包括医学图像数据,还包括许多和医学图像有关的信息,如病人姓名,图像大小等等。数据元素由若干字段组成:数据元素标签(Data Element Tag)、数据值类型表述(value representation ,VR)、数据值长度、数据值体。
数据元素标签,是一个16Bits无符号整数对按顺序排列。前面是数据元素的组号,后面是数据元素号码,数据元素是通过数据元素标签唯一标志的,组号为偶数的是标准数据元素,DICOM的数据字典中有定义,如(0008,0020)表示研究日期,(7FE0,0010)表示像素数据;组号为奇数的为私有数据元素,由用户在使用过程中自己定义,但在DICOM标准中对自己定义的数据元素也有详细的规则说明。
数据值类型表述,是16Bits的字符串,指明该数据元素中的数据是那种类型的,用DICOM默认字符集编码。如:一个数据元素的VR为DA,则表示该数据元素中存储的数据为日期型数据。
数据值长度,是一个16Bits或32Bits(取决于显示或隐式VR)无符号整数,表明准确的数据值体的长度,按字节数目记录。
数据值体,其长度为偶数字节,存放了该数据元素的数值,该字段的数据类型由数据元素的VR所确定。
1.2.2 BMP文件格式 BMP文件由四个部分组成:位图文件头(Bitmap-file)、位图信息头(Bitmap-information)、彩色表(Color Table)或调色板(Palette)、图像数据阵列。〔5〕
位图文件头包含文件类型、文件大小、存放位置等信息,在Windows中用BITMAPFILEHEADER结构定义,这个结构的长度是固定的,为14Bytes;位图信息头BITMAPINFOHEADER也是一个长度固定的结构,为40Bytes;调色板是可选项,如果有调色板,则调色板实际上是一个数组,它建立了数组和颜色之间的对应关系,其个数为位图使用的颜色数个元素,数组中每个元素的类型是一个RGB QUAD结构,占4Bytes,定义如下:1Byte用于蓝色分量,1Byte用于绿色分量,1Byte用于红色分量,1Byte用于填充符(设置为0);图像数据位于调色板之后。若没有调色板,则在BITMAPINFOHEADER之后。
1.2.3 两种图像文件格式的不同 DICOM图像与BMP图像文件头和数据结构都有很大差别,DICOM图像除了有图像大小、高度、宽度、每像素字节数等普通图像的必备信息外,还在数据集合的数据元素中存储了大量医疗信息如病人姓名、年龄、医院名、成像时间、检查部位等。
两种图像的图像数据阵列也有很大差异,DICOM图像是按顺序存储的,阵列中的第一个字节表示图像左上角的像素,而最后一个字节表示图像右下角的像素;BMP图像是由底向上存储的,也就是说,阵列中的第一个字节表示图像左下角的像素,而最后一个字节表示图像右上角的像素,因此在图像转换中需要用到镜像变换。
阅读DICOM与BMP文献,分析比较其图像存储格式,编程读取DICOM图像文件信息,进行镜像变换和加窗显示技术,写入BMP文件以实现图像格式的转换。
1.2.4 镜像变换 镜像变换是医学图像处理的一种手段,分为水平镜像变换、垂直镜像变换、对角镜像变换等。水平镜像变换图像以图像铅直中轴线为对称轴进行列像素对调;垂直镜像变换以图像水平中轴线为对称轴进行行像素对调,对角镜像变换以图像对角线为对称轴进行像素对调。
1.2.5 加窗显示技术 所谓加窗显示是指通过一个窗口,将窗口区域的图像线性地转换到显示器的最大显示范围内,高于或低于窗口上下限的图像数据则分别设置为最高或最低的显示值。这样通过动态地调节窗口的窗宽(需显示的图像数据的范围)和窗位(需显示的图像数据的中心值),则可以观察医学图像的更多信息。〔6〕
1.2.6 图像转换过程 图像转换程序的流程图如图2所示,在图2中,cb 表示图像文件的大小,DICOM表示数组,Rows 表示图像行数,Columns表示图像列数, WC表示图像窗位, WW表示图像窗宽, PixData表示图像数据的起始位置。
2 结 果
程序实现的图像格式转换的结果如图3和图4所示。
图4便是由图3转换得到的图像,此程序实现的功能并没有读取DICOM图像患者本身的信息(如姓名、性别、年龄、等等)、扫描参数(如千伏、毫安、层厚、等等),只读取了图像的数据。
3 讨 论
由于BMP图像每一行的字节数必须是4的整倍数,因此,在转换时需补齐;另外,BMP文件的数据从下到上,从左到右的存放,因此,写入BMP的像素需要做垂直镜像变换处理。
在BMP图像中,其存储像素的蓝、绿、红3Bytes的值相等就构成了黑白灰阶图像,因此在显示黑白灰阶图像时,这3Bytes只包含了1Byte的信息,从而BMP图像只能包含256个灰度等级;而DICOM格式的图像数据可以按8Bits、12Bits、16Bits或24Bits存储,对于8Bits的数据可以直接按坐标位置填入BMP图像中,对于其他三种情况则可通过加窗显示技术使其转换为8Bits的BMP图像或再填充使蓝、绿、红3Bytes的值相等构成24Bits 的黑白灰阶图像。
胜利油田中心医院somatom sensation 16CT DICOM图像每一个像素占2个Bytes,有效的是12Bits信息,即12Bits的黑白灰阶图像。图3是初始的DICOM图像,大小为514K,图4是图3转换后的BMP图像,大小为257K,大小为原图像的一半,原因是DICOM图像每一个像素占2Bytes,而转换后的BMP图像每一个像素占1Byte。
网上找的我是没看懂希望对你有帮助。。
F. opencv下如何直接读取dicom文件
您好,可参考:http://blog.csdn.net/songzitea/article/details/11096287,根据dicom的文件格式要求解读,然后转化为Mat数据,重载imread函数。可看看这个源码:http://download.csdn.net/download/goodluckgg/2301575
G. dcm文件怎么转化成dicom
很多时候,我们在协助患者或家属整理病历资料时,都建议提供一份DICOM影像资料。但对于该资料,很多患者及家属表示没有听说过或了解甚少,下面,厚朴方舟为大家介绍下DICOM是什么,以及它对病情诊断的重要性。
什么是DICOM
DICOM(Digital Imaging and Communications in Medicine)是一种国内外医疗机构用来管理、传输医疗影像资料和相关数据的通用协议,也是国际上通用的CT、MR、PETCT等的标准电子影像信息格式,就像pdf、TXT、JPG等。主要用于将影像资料进行:导出、储存、分享、展示、传输、咨询、检索、打印等。对于在不同医院间就医扮演了至关重要的角色。
DICOM的重要性
通常我们在医院做完CT、MR等检查后会拿到胶片,而这份胶片就是由医生从DICOM格式影像资料中,抽取出一部分,打印后制成的。
但原始的DICOM格式中储存有大量的影像图片,比如一次CT检查,就可产生900多张DICOM格式影像资料,并且根据不同角度或位置,图像被分类到了不同的序列中,通过鼠标操作,医生可以清楚地看到影像中病灶的大小、位置、形态,与周围重要器官、血管、神经的关系等重要信息,这些信息会影响到对疾病和治疗方式的判断。
由于DCIOM的影像更多,信息更全面,就极大的避免了异常未发现、有问题部分未抽取等误诊、漏诊情况的发生。因此,提供原始的DICOM影像资料给其他医生进行二次诊断,就尤为重要。
DICOM获取途径
要想拿到DICOM影像资料,要注意与医院的工作人员保持良好的沟通,还要找对人。根据经验,可以咨询以下医务人员:
1. 主治医师;
2. 影像科医师或其他导诊台等:通常医院会直接在影像科室保存电子资料;
3. 信息科人员:部分医院设有完备的信息科,用来管理全院的电子资料;
4. 医院的行政管理人员等。 通常医院会提供储存有DICOM格式资料的光盘或者需要患者拿U盘去拷贝。
如何打开查看DICOM
给大家分享免费软件里最快速和简洁的一个,名叫RadiAnt DICOM Viewer的软件。下载地址为https://www.radiantviewer.com。
下载完成后,安装过程就和普通软件一样,按照提示完成所有操作就可以了。安装完成后,桌面就会出现相应的软件图标。
双击打开该软件后点击文件夹图标,就会出现让你选择文件夹的界面。比如你拷贝的DICOM格式图像在U盘里,你就直接选择整个U盘作为输入文件夹就可以了,不需要特别精确的文件夹位置,因为软件会自动搜索所选文件夹里的DICOM文件。
打开DICOM格式图像后,就变成如下图所示的界面。滑动鼠标的滚轮,图像就会上下层切换。
这个软件的功能是非常强大,像病灶大小、密度测量,图像三维重建等都可完成,由于此类功能对患者及家属的用处不大,这里就不一一介绍了。
如何发给厚朴方舟
拿到DICOM后,需要将文件压缩为RAR或者ZIP文件,通过邮箱中的超大附件发送至厚朴方舟专属医学顾问的邮箱。
如果不方便上传,也可以直接通过快递邮寄至我公司。
若您对于DICOM有更多信息想要了解,可联系厚朴方舟。
H. 如何网页中显示DICOM图像
转换成jpg,gif等格式。即可
I. 医学影像文件dcm格式用什么软件打开 在哪里可以下载到.
ITK-SNAP,RadiAnt DICOM Viewer,3DMed都可以,在官方商店或第三方软件中就可以下载。
医学影像专用格式:.dcm
Dicom,常用于传输和存储超声波、CT、核磁、扫描等医学图像,需要分层保存,所以一般是专用软件打开,PS只是客串了一下兼容。
通用文件格式:.pdf
通用文件格式支持图层,蒙版,路径,矢量图形等分层编辑,类似PSD,兼容好。
生活常见输出格式
1、打印机输出格式:.eps
印前领域PostScript(打印机的一种程序代码/语言方式)MAC机用得多,更适合用来输出菲林产品。
2、过时代图片格式:.pcx
支持压缩,全彩,RGB,索引等,某一时代的王者,但随着Windows时代的到来,逐渐被jpg/tiff等取代,不过用它来保存线画搞图也是可以的。
3、数码相机专用格式:.raw
最大限度保留原始照片的细节,从而保留了更多调色空间,是专业摄影师的最爱,俗称“数字底片”。
J. 本人图像处理新人,求 Visual Studio 2010读取 Dicom 图片文件的代码,最终要能显示 Dicom 图片!!!
structTagValue
{
unsignedshorttag1;
unsignedshorttag2;
};
voidmain()
{
boolisVR=true;
boolisLitteEndian=true;
intfile_length=0;
charVR[3];
unsignedintpixDataLen=0;
unsignedintpixDataOffset=0;
unsignedshortchannle=0;
unsignedshortrows=0;
unsignedshortcols=0;
unsignedshortdataLen=0;
unsignedshortvalidLen=0;
intwindowsWidth=0;
intwindowsCenter=0;
boolZeroIsBlack=true;
intRescaleSlope=0;
intRescaleIntercept=0;
FILE*fp;
fp=fopen("xxxx.dcm","rb");
if(fp==NULL)
{
printf("cannotopenfile!");
return;
}
fseek(fp,0,SEEK_END);
file_length=ftell(fp);
fseek(fp,0,SEEK_SET);
fseek(fp,128,SEEK_SET);
charheadchar[5];
memset(headchar,0,5);
intread_num=fread(headchar,1,4,fp);
if(read_num!=4)
{
fclose(fp);
return;
}
if(strcmp(headchar,"DICM"))
{
fclose(fp);
printf("FileisnotDICM");
return;
}
while(ftell(fp)+6<file_length)
{
TagValuetag;
unsignedintlen;
memset(VR,0,3);
fread(&tag,sizeof(TagValue),1,fp);
intindex=ftell(fp);
if(tag.tag1==0x02)
{
fread(VR,1,2,fp);
if(!strcmp(VR,"OB")||!strcmp(VR,"OW")||!strcmp(VR,"SQ"))
{
fseek(fp,2,SEEK_CUR);
fread(&len,sizeof(unsignedint),1,fp);
}
else
{
unsignedshortl;
intss=fread(&l,sizeof(unsignedshort),1,fp);
inta=ftell(fp);
len=(unsignedint)l;
}
}
elseif(tag.tag1==0xfffe)
{
if(tag.tag2==0xe000||tag.tag2==0xe00d||tag.tag2==0xe0dd)
{
fread(&len,sizeof(unsignedint),1,fp);
}
}
elseif(isVR==true)
{
fread(VR,1,2,fp);
inta=ftell(fp);
if(!strcmp(VR,"OB")||!strcmp(VR,"OW")||!strcmp(VR,"SQ"))
{
fseek(fp,2,SEEK_CUR);
fread(&len,sizeof(unsignedint),1,fp);
}
else
{
unsignedshortl;
l=sizeof(unsignedshort);
fread(&l,sizeof(unsignedshort),1,fp);
a=ftell(fp);
len=(unsignedint)l;
}
}
elseif(isVR==false)
{
fread(&len,sizeof(unsignedint),1,fp);
}
if(tag.tag1==0x02&&tag.tag2==0x10)
{
charmsg[124];
memset(msg,0,124);
fread(msg,1,len,fp);
if(!strcmp(msg,"1.2.840.10008.1.2.1"))
{
isLitteEndian=true;
isVR=true;
}
elseif(!strcmp(msg,"1.2.840.10008.1.2.2"))
{
isLitteEndian=false;
isVR=true;
}
elseif(!strcmp(msg,"1.2.840.10008.1.2"))
{
isLitteEndian=true;
isVR=false;
}
}
elseif(tag.tag1==0x7fe0&&tag.tag2==0x10)
{
pixDataLen=len;
pixDataOffset=ftell(fp);
fseek(fp,len,SEEK_CUR);
}
elseif(tag.tag1==0x28&&tag.tag2==0x10)
{
fread(&rows,sizeof(unsignedshort),1,fp);
}
elseif(tag.tag1==0x28&&tag.tag2==0x11)
{
fread(&cols,sizeof(unsignedshort),1,fp);
}
elseif(tag.tag1==0x28&&tag.tag2==0x02)
{
fread(&channle,sizeof(unsignedshort),1,fp);
}
elseif(tag.tag1==0x28&&tag.tag2==0x101)
{
fread(&validLen,sizeof(unsignedshort),1,fp);
}
elseif(tag.tag1==0x28&&tag.tag2==0x100)
{
fread(&dataLen,sizeof(unsignedshort),1,fp);
}
elseif(tag.tag1==0x28&&tag.tag2==0x1050)
{
charmsg[11];
memset(msg,0,11);
fread(msg,1,len,fp);
windowsCenter=atoi(msg);
}
elseif(tag.tag1==0x28,tag.tag2==0x1051)
{
//fseek(fp,len,SEEK_CUR);
charmsg[40];
memset(msg,0,40);
fread(msg,1,len,fp);
windowsWidth=atoi(msg);
}
elseif(tag.tag1==0x0028&&tag.tag2==0x0004)
{
charmsg[40];
memset(msg,0,40);
fread(msg,1,len,fp);
if(!strcmp(msg,"MONOCHROME1"))
{
ZeroIsBlack=false;
}
elseif(!strcmp(msg,"MONOCHROME2"))
{
ZeroIsBlack=true;
}
}
elseif(tag.tag1==0x0028&&tag.tag2==0x1052)
{
charmsg[40];
memset(msg,0,40);
fread(msg,1,len,fp);
RescaleIntercept=atoi(msg);
}
elseif(tag.tag1==0x0028&&tag.tag2==0x1053)
{
charmsg[40];
memset(msg,0,40);
fread(msg,1,len,fp);
RescaleSlope=atoi(msg);
}
else
{
charmsg[1024];
memset(msg,0,1024);
fread(msg,1,len,fp);
}
}
fseek(fp,pixDataOffset,SEEK_SET);
if(windowsCenter==0&&windowsWidth==0)
{
windowsWidth=1<<validLen;
windowsCenter=windowsWidth/2;
}
intmin_value,max_value;
min_value=windowsCenter-windowsWidth/2.0+0.5;
max_value=windowsCenter+windowsWidth/2.0+0.5;
doublepers=255.0/(max_value-min_value);
Matsrc;
if(channle==1)
{
src.create((int)rows,(int)cols,CV_8UC1);
for(inti=0;i<rows;i++)
{
for(intj=0;j<cols;j++)
{
short gray=0;
unsignedcharpix[2];
fread(pix,1,2,fp);
if(validLen<=8)
{
if(isLitteEndian)
{
gray=pix[0];
}
else
{
gray=pix[1];
}
}
else
{
if(isLitteEndian)
{
gray=*(short*)pix;
gray=gray/RescaleSlope+RescaleIntercept;
}
else
{
gray=pix[1]+pix[0]*256;
}
if(gray>0xff)
{
gray=gray;
}
if(gray<0)
{
gray=gray;
}
}
if(!ZeroIsBlack)
{
gray=255-gray;
}
src.at<uchar>(i,j)=gray;
}
}
}
elseif(channle==3)
{
src.create((int)rows,(int)cols,CV_8UC3);
for(inti=0;i<rows;i++)
{
for(intj=0;j<cols;j++)
{
unsignedcharpix[3];
fread(pix,1,3,fp);
src.at<Vec3b>(i,j)[0]=pix[2];
src.at<Vec3b>(i,j)[1]=pix[1];
src.at<Vec3b>(i,j)[2]=pix[0];
}
}
}
fclose(fp);
imshow("src",src);
waitKey(0);
}
使用opencv做的显示,这里面有一些小问题,需要自己调试修改