Opencv系列5_opencv命名方式读取指定路径DCM并批量另存为JPG图像

实例5:opencv命名方式读取指定路径DCM并批量另存为JPG图像

#include 
#include   // 当中含有_finddata_t
#include 
#include 

#include 
#include 
#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define NUMBER 72//(CT文件数量为NUMBER-1)

using namespace std;
using namespace cv;

// 读入一个CT图,返回它的像素矩阵,使用OpenCV的Mat类型返回
// VTK读取DICOM图像并将像素值转给OpenCV的Mat对象
void dicomread(string inputFilename, Mat &img,vtkSmartPointer &reader)
{
    img.create(512,512,CV_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;kGetOutput()->GetScalarPointer(i,j,k)); // 第i列第j行的像素值
				img.at(j,i) = int(*pixel); // 第j行第i列的像素值
			}
		}
	}
}
//可视化DICOM图像
void showdicom(Mat I)
{
	double maxx=0,minn=0;
    double *max = &maxx;
	double *min = &minn;
	I.convertTo(I,CV_64FC1);
	minMaxIdx(I,min,max);
	for(int i=0;i(i,j) = 255*(I.at(i,j)-minn)*1/(maxx-minn);
		}
	}
	
	minMaxIdx(I,min,max);
	for(int i=0;i(i,j) = (I.at(i,j)-minn)*1/(maxx-minn);
	}
	//cout << I < images;
	char ad[128] = { 0 };
	for (int j = 1;j < NUMBER;j+=10) {
		string filename = format("F:\\Software\\VTK8.2.0\\vtk1\\helloVtk\\CT\\1066244_20110617_CT_102_215_%03d.dcm", j);
		Mat I1, G1;//I1为原图,G1为转化图
		vtkSmartPointer reader =
			vtkSmartPointer::New();
		// 读入dicom图,并将像素值传递给Mat对象I1
		dicomread(filename, I1, reader);
		flip(I1, I1, 0);
		//显示得到的Mat对象I1的信息*(单通道 大小512*512)
		cout << I1.channels() << "  " << I1.size() << endl;
		showdicom(I1);
		//保存图像
		sprintf_s(ad, "F:\\Software\\VTK8.2.0\\vtk1\\helloVtk\\JPG_images\\%d.jpg", j);
		imwrite(ad, I1);
	}
}

每按下空格,进行下一张图像读取和显示:

    

程序运行完后,在F:\Software\VTK8.2.0\vtk1\helloVtk\JPG_images路径下便可以查看另存的JPG图像:

本例程配套素材见源码整理文章下载(点击进入)

你可能感兴趣的:(openCV,C++基础编程,文件格式转换,opencv,C++,命名方式读取,指定路径读取,批量另存为JPG)