前言
是之前“GDAL转Mat格式”的逆过程。
代码
//作者:山科_xxin
//时间:2017-04-05 21:53:44
//功能:<a href="https://www.ixxin.cn/tag/opencv2gdal/" title="查看更多关于Opencv2GDAL的文章" target="_blank">Opencv2GDAL</a>
//类别:<a href="https://www.ixxin.cn/tag/opencv/" title="查看更多关于Opencv的文章" target="_blank">Opencv</a>,<a href="https://www.ixxin.cn/tag/gdal/" title="查看更多关于GDAL的文章" target="_blank">GDAL</a>
int opencv2gdal(cv::Mat img, const char* fileName)
{
    if(img.empty())    //    判断是否为空
        return 0;
    const int nBandCount=img.channels();
    const int nImgSizeX=img.cols;
    const int nImgSizeY=img.rows;
	//cout<<nBandCount<<endl;
    GDALAllRegister();
    GDALDataset *poDataset;   //GDAL数据集
    GDALDriver *poDriver;      //驱动,用于创建新的文件
    poDriver = GetGDALDriverManager()->GetDriverByName("GTiff");
    if(poDriver == NULL)
        return 0;
    poDataset=poDriver->Create(fileName,nImgSizeX,nImgSizeY,nBandCount,
                                GDT_Byte,NULL);
    //  循环写入文件
    <a href="https://www.ixxin.cn/tag/gdal/" title="查看更多关于GDAL的文章" target="_blank">GDAL</a>RasterBand *pBand = NULL;
    //uchar *ppafScan = new uchar[nImgSizeX*nImgSizeY];
    int nl = nImgSizeY;
    int nc = nImgSizeX;
	vector<Mat> channels;
	split(img,channels);
	Mat tmpMat;
	for(int n = 1;n<=nBandCount;n++)
	{
		pBand = poDataset->GetRasterBand(n);
		uchar *ppafScan = new uchar[nImgSizeX*nImgSizeY];
		tmpMat = channels.at(n-1).clone();
		if(tmpMat.isContinuous())
		{
			//cout<<"0"<<endl;
			nc = nc*nl;
			for(int i = 0;i<nc;i++)
			{
				ppafScan = tmpMat.ptr<uchar>(0);
				//ppafScan[i] = tmpMat.ptr<uchar>(0)[i];
			}
		}
	/*
    if(img.isContinuous())
    {
		nc = nl*nc;
        n1 = 1;
    }
    for(int r = 0;r<n1;r++)
    {
		int tmpI = r*nImgSizeX;
        float *p = img.ptr<float>(r);
        for(int c = 0;c<nc;c++)
			{
                ppafScan[tmpI+c] = p[c];
            }
     }
	 */
		pBand->RasterIO(GF_Write,0,0,nImgSizeX,nImgSizeY,
			ppafScan,nImgSizeX,nImgSizeY,GDT_Byte,0,0);
		tmpMat.release();
		//ppafScan = NULL;
	}
    //delete []ppafScan;
    //ppafScan = NULL;
    <a href="https://www.ixxin.cn/tag/gdal/" title="查看更多关于GDAL的文章" target="_blank">GDAL</a>Close(poDataset);
    return 0;
}
结果:

存在一个问题就是颜色不完全匹配。
参考文章
http://www.tuicool.com/articles/ARJ3uab








 
