Из cvMat в QImage
Я хочу преобразовать изображение из типа cvMat в Qimage, с моим реальным кодом приложение не работает; я сделал это по-другому (Qimage to Mat это работает нормально), пожалуйста, скажите мне, что происходит с моим кодом
вот мой код для Qimage to Mat:
Mat qimage2mat(const QImage& qimage) {
cv::Mat mat = cv::Mat(qimage.height(), qimage.width(), CV_8UC4, (uchar*)qimage.bits(), qimage.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 );
return mat2;
}
и вот мой код для Mat to Qimage
QImage mat2qimage(const Mat& mat) {
Mat rgb;
cvtColor(mat, rgb, CV_BGR2RGB);
return QImage((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888);
}
заранее спасибо
1 ответ
Решение
Как упомянул @SpamBot, данные освобождаются, когда Mat выходит из области видимости. попробуйте глубокое копирование данных:
QImage mat2qimage(const Mat& mat)
{
Mat rgb;
cvtColor(mat, rgb, CV_BGR2RGB);
return QImage((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888).copy();
}