DicomImage,cvMat,QImage之间的转换

//读取文件名和保存解压后的临时文件名
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);
}

扫描二维码关注公众号,回复: 4832997 查看本文章

    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;
}

猜你喜欢

转载自blog.csdn.net/fanhenghui/article/details/86061110