在Qt中查看.raw文件
Qt中圖像類爲QImage,而OpenCV對圖像操作使用Mat/IplImage,因此,想要在Qt的控件上查看.raw文件需要先將IplImage/Mat轉換爲QImage
筆者就是參考這個鏈接,稍加改動,將.raw文件顯示到了QLabel中
代碼如下:
void MainWindow::showImage()
{
//文件路徑必須這樣寫,否則會報錯
char *rawFileName = "D://QT//Work//testData//_1000_0_90//1.raw";
FILE *fp = NULL;
int ret = 0,width = 1440, height = 1080;
//爲讀取16bit raw數據分配空間
unsigned short *pRawData = (unsigned short *)calloc(width*height, sizeof(unsigned short));
fp=fopen(rawFileName, "rb");
ret = fread(pRawData,sizeof(unsigned short)*width*height,1, fp);
IplImage *pBayerData = cvCreateImage(cvSize(width,height), 16, 1);
IplImage *pRgbDataInt16 = cvCreateImage(cvSize(width,height),16,3);
IplImage *pRgbDataInt8 = cvCreateImage(cvSize(width,height),8,3);
memcpy(pBayerData->imageData, (char *)pRawData, width*height*sizeof(unsigned short));
cvCvtColor(pBayerData, pRgbDataInt16, COLOR_RGB2BGR);
//將16bit數據轉換爲8bit
cvConvertScale(pRgbDataInt16, pRgbDataInt8, 0.015625, 0);
QImage image(Ipl_to_QImage(pRgbDataInt8));
QPixmap pixmap = QPixmap::fromImage(image);
ui->lab_picture->setPixmap(pixmap);
}
QImage MainWindow::Ipl_to_QImage(const IplImage *iplImg)
{
int w = iplImg->width;
int h = iplImg->height;
QImage qImage(w, h, QImage::Format_RGB32);
int x, y;
for(x = 0; x < iplImg->width; ++x)
{
for(y = 0; y < iplImg->height; ++y)
{
CvScalar color = cvGet2D(iplImg, y, x);
int r = color.val[2];
int g = color.val[1];
int b = color.val[0];
qImage.setPixel(x, y, qRgb(r,g,b));
}
}
return qImage;
}