Qimage к cv :: Mat преобразования странное поведение

Я пытаюсь создать приложение, в котором я пытаюсь интегрировать OpenCV и QT.

Мне удалось успешно преобразовать cv :: Mat в QImage с помощью кода ниже:

void MainWindow::loadFile(const QString &fileName)
{
    cv::Mat tmpImage = cv::imread(fileName.toAscii().data());
    cv::Mat image;

    if(!tmpImage.data || tmpImage.empty())
    {
        QMessageBox::warning(this, tr("Error Occured"), tr("Problem loading file"), QMessageBox::Ok);
        return;
    }

/* Mat to Qimage */
    cv::cvtColor(tmpImage, image, CV_BGR2RGB);
    img = QImage((const unsigned char*)(image.data), image.cols, image.rows, QImage::Format_RGB888);

    imgLabel->setPixmap(QPixmap::fromImage(img));
    imgLabel->resize(imgLabel->pixmap()->size());

    saveAsAct->setEnabled(true);
}

Тем не менее, когда я пытаюсь преобразовать QImage в cv :: Mat с помощью следующего кода:

bool MainWindow::saveAs()
{
    if(fileName.isEmpty())
    {
        QMessageBox::warning(this, tr("Error Occured"), tr("Problem loading file"), QMessageBox::Close);
        return EXIT_FAILURE;
    }else{
        outputFileName = QFileDialog::getSaveFileName(this, tr("Save As"), fileName.toAscii().data(), tr("Image Files (*.png *.jpg *.jpeg *.bmp)\n *.png\n *.jpg\n *.jpeg\n *.bmp"));

    /* Qimage to Mat */
    cv::Mat mat = cv::Mat(img.height(), img.width(), CV_8UC4, (uchar*)img.bits(), img.bytesPerLine());
    cv::Mat mat2 = cv::Mat(mat.rows, mat.cols, CV_8UC3 );
    int from_to[] = {0,0,  1,1,  2,2};
    cv::mixChannels(&mat, 1, &mat2, 1, from_to, 3);

    cv::imwrite(outputFileName.toAscii().data(), mat);
}

saveAct->setEnabled(true);
return EXIT_SUCCESS;
}

У меня нет успеха, и в результате получается совершенно неупорядоченный образ. В сети, которую я искал, я увидел, что люди используют этот способ без упоминания каких-либо конкретных проблем. У кого-нибудь есть идеи, о чем может быть причина проблемы? Заранее спасибо.

Theoodore

Постскриптум Я использую opencv 2.4 и Qt 4.8 в системе Arch Linux с gnome-3.4

Ответы на вопрос(6)

Ваш ответ на вопрос