Bayer图像不做赘述
一、Bayer(GRBG)图像转RGB
处理方法:对于某个像素点,存在的分量值不变化,缺少的两个分量值使用Correlation-Adjusted算法
QImage CorrelationAdjusted(QImage srcImg, int type) { int imgW = srcImg.width(); int imgH = srcImg.height(); // if (srcImg.format() != QImage::Format_Grayscale8) // return srcImg; if (type == 0) return srcImg; QImage dstImg(imgW, imgH, QImage::Format_Grayscale8); QImage colImg(imgW, imgH, QImage::Format_RGB888); uchar *srcImgData;// = srcImg.bits(); uchar *dstImgData;// = dstImg.bits(); uchar *colImgData;// = colImg.bits(); uchar r, g, b, temVal; for (int i = 0; i < imgH; i++) { dstImgData = dstImg.scanLine(i); colImgData = colImg.scanLine(i); srcImgData = srcImg.scanLine(i); //判断边缘两行 if (i < 2 || i >= imgH - 2) { int Raver, Rtot, Gaver, Gtot, Baver, Btot; for (int j = 0; j < imgW; j++) { Raver = Rtot = Gaver = Gtot = Baver = Btot = 0; if (i % 2 == j % 2) { if (i > 0) { if (i % 2) Raver += srcImg.scanLine(i - 1)[j], Rtot++; else Baver += srcImg.scanLine(i - 1)[j], Btot++; } if (i < imgH - 1) { if (i % 2) Raver += srcImg.scanLine(i + 1)[j], Rtot++; else Baver += srcImg.scanLine(i + 1)[j], Btot++; } if (j > 0) { if (i % 2) Baver += srcImgData[j - 1], Btot++; else Raver += srcImgData[j - 1], Rtot++; } if (j < imgW - 1) { if (i % 2) Baver += srcImgData[j + 1], Btot++; else Raver += srcImgData[j + 1], Rtot++; } Gaver = srcImgData[j], Gtot = 1; } else { if (i > 0) Gaver += srcImg.scanLine(i - 1)[j], Gtot++; if (i < imgH - 1) Gaver += srcImg.scanLine(i + 1)[j], Gtot++; if (j > 0) Gaver += srcImgData[j - 1], Gtot++; if (j < imgW - 1) Gaver += srcImgData[j + 1], Gtot++; int Naver = 0, Ntot = 0; if (i > 0) { if (j > 0) Naver += srcImg.scanLine(i - 1)[j - 1], Ntot++; if (j < imgW - 1) Naver += srcImg.scanLine(i - 1)[j + 1], Ntot++; } if (i < imgH - 1) { if (j > 0) Naver += srcImg.scanLine(i + 1)[j - 1], Ntot++; if (j < imgW - 1) Naver += srcImg.scanLine(i + 1)[j + 1], Ntot++; } if (i % 2) { Baver = srcImgData[j], Btot = 1; Raver = Naver, Rtot = Ntot; } else { Raver = srcImgData[j], Rtot = 1; Baver = Naver, Btot = Ntot; } } colImgData[j * 3] = Raver / Rtot; colImgData[j * 3 + 1] = Gaver / Gtot; colImgData[