2011-09-05 85 views
4

我有一個問題,我一直試圖找出幾天現在。我使用OpenCV從相機獲取幀,然後將其轉換爲QImage並嘗試將幀保存在磁盤上。我面臨的問題是,如果我編譯/運行Visual Studio中的釋放/調試模式下的代碼,那麼它工作正常。如果我運行visual studio創建的可執行文件進行調試模式,那麼它運行良好。但是,如果我運行可視化工作室在釋放模式下創建的可執行文件,gui的工作良好,除了QImage save()函數不再有效。如果我使用OpenCV功能來保存幀,那麼它在所有模式下都能正常工作。我試圖保存的QImage不爲空,因爲我的註釋文本框顯示內部打印的行,但保存函數返回false。我真的很感激幫助。問題與QT保存()函數爲QImage

這裏是一個小代碼:

規範的IplImage和QImage的之間的轉換(我也用另一種代碼,具有相同的結果)

QImage A::IplImage2QImage(const IplImage *iplImage) 
{ 
    int height = iplImage->height; 
    int width = iplImage->width; 
    if (iplImage->depth == IPL_DEPTH_8U && iplImage->nChannels == 3) { 
     const uchar *qImageBuffer = (const uchar*)iplImage->imageData; 
     QImage img(qImageBuffer, width, height, QImage::Format_RGB888); 
     return img.rgbSwapped(); 
    } 
    else { 
     // qWarning() << "Image cannot be converted."; 
     return QImage(); 
    } 
} 

void A::getFrame() 
{ 
    commentsTextBox->setText("getFrame"); 
    if (VI.isFrameNew(device1)) { 
     VI.getPixels(device1, (unsigned char *)frame->imageData, false, true); 
    } 
    QImage qimg2 = IplImage2QImage(frame); 
    m_Label->setPixmap(QPixmap::fromImage(qimg2)); 
    if (!qimg2.isNull()) { 
     x = qimg2.save("C:\\Data\\test.jpg"); 
     commentsTextBox->append("notEmpty33"); 
    } 
} 
+2

請確保您有在釋放模式可支持JPG。你可以加載並保存一個JPG罰款? –

+1

是的,這聽起來像是缺少jpg庫,並且正在悄然失敗。 –

+0

你可以試試這個:http://stackoverflow.com/questions/7152597/qt-unable-to-save-jpeg-files/7160245#7160245。 – alexisdm

回答

4

我有同樣的問題的QImage ::加載()。我將發佈一份alexisdm鏈接中指出的解決方案的副本,以便使其更清晰。

在windows下,qjpeg4.dll必須默認在 下的imageformats目錄下。

謝謝!

+0

也在Linux下。謝謝你的提示! – TranslucentCloud

0

嘗試這樣的事情,

// Prepare the url, 
QUrl url("file:///home/ubuntu/Desktop/image.jpg"); 

// Get the path, 
QString path = url.path(); 

// Save the image, 
myQimage.save(path);