在Qt中查看.raw文件

在Qt中查看.raw文件

Qt中圖像類爲QImage,而OpenCV對圖像操作使用Mat/IplImage,因此,想要在Qt的控件上查看.raw文件需要先將IplImage/Mat轉換爲QImage

推薦鏈接:IplImage與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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章