//读取文件名和保存解压后的临时文件名
string fileNamestr=fileName.toStdString();
//解压dicom文件
DJDecoderRegistration::registerCodecs();
DcmFileFormat Dicomfile;
if(Dicomfile.loadFile(fileNamestr.c_str()).good())
{
DcmDataset *dataset=Dicomfile.getDataset();
dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);
if (dataset->canWriteXfer(EXS_LittleEndianExplicit))
{
Dicomfile.saveFile(to_string(tempFileName).c_str(), EXS_LittleEndianExplicit);
}
DJDecoderRegistration::cleanup();
//提取解压后的dicom文件的图像信息,并进行处理。
DicomImage *dicomFile=new DicomImage(to_string(tempFileName).c_str());
dicomFile->setWindow(winCenter,winWidth);
Uint16 *pixel=(Uint16*)(dicomFile->getOutputData(16));
cv::Mat dst(dicomFile->getWidth(),dicomFile->getHeight(),CV_16U,pixel);
if(tempFileName==TEMPDICOM1) dst.copyTo(dicomMat1);
if(tempFileName==TEMPDICOM2) dst.copyTo(dicomMat2);
}
cv::Mat dst;
if(tempDicom==TEMPDICOM1) dst=Mat16toMat8(dicomMat1).clone();
if(tempDicom==TEMPDICOM2) dst=Mat16toMat8(dicomMat2).clone();
QImage img=QImage((Uint8*)dst.data,dst.cols,dst.rows,dst.cols*dst.channels(),QImage::Format_Indexed8);
QGraphicsScene *scene=new QGraphicsScene;
scene->addPixmap(QPixmap::fromImage(img));
if(tempDicom==TEMPDICOM1)
{
ui->graphicsView1->resetTransform();
ui->graphicsView1->setScene(scene);
ui->graphicsView1->resize(img.width()+10,img.height()+10);
ui->graphicsView1->show();
}
else if(tempDicom==TEMPDICOM2)
{
ui->graphicsView2->resetTransform();
ui->graphicsView2->setScene(scene);
ui->graphicsView2->resize(img.width()+10,img.height()+10);
ui->graphicsView2->show();
}
//int转换为字符数组
const char* itoa2(int val)
{
static char result[(sizeof(int)<<3)+2];
sprintf(result,"%d",val);
return result;
}
//cvMat转换为mwArray
mwArray Mat2mwArray(cv::Mat src)
{
cv::Mat tempMat=src.clone();
mwSize dims[2]={src.cols,src.rows};
mwArray pMat(2,dims,mxUINT16_CLASS);
UINT16* x=(UINT16*)tempMat.data;
pMat.SetData(x,src.rows*src.cols);
return pMat;
}
//mwArray转换为cvMat
cv::Mat mwArry2Mat(mwArray src)
{
mwArray dims=src.GetDimensions();
int M=dims(1);
int N=dims(2);
cv::Mat image(M,N,CV_16UC1);
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
int index=src(i+1,j+1);
//if(index>255) index=255;
image.at<Uint16>(j,i)=index;
}
}
return image;
}
//cvMat保存为txt
void cvmat2Txt(cv::Mat m,string fileName)
{
ofstream fout(fileName,ios::binary);
for(int i=0;i<m.cols;i++){
for(int j=0;j<m.rows;j++){
fout<<(int)m.at<Uint16>(i,j)<<" ";
//fout<<m.at<Uint16>(i,j)<<" ";
}
fout<<endl;
}
}
//mwArray保存为txt
void mwarray2Txt(mwArray mw,string fileName)
{
ofstream fout(fileName);
for(int i=0;i<512;++i)
{
for(int j=0;j<512;++j)
{
fout<<mw(i+1,j+1)<<" ";
}
fout<<endl;
}
fout.close();
}
cv::Mat Mat16toMat8(cv::Mat Mat16)
{
cv::Mat Mat8(Mat16.rows,Mat16.cols,CV_8UC1);
for(int i=0;i<Mat16.rows;++i)
{
for(int j=0;j<Mat16.cols;++j)
{
Mat8.at<Uint8>(i,j)=Mat16.at<Uint16>(i,j)/256;
}
}
return Mat8;
}