我有一个问题,我一直试图弄清楚几天。我正在使用OpenCV从相机中获取帧,然后我将其转换为QImage并尝试将帧保存在磁盘上。我面临的问题是,如果我在visual studio中以发布/调试模式编译/运行代码,那么它可以正常工作。如果我运行visual studio为调试模式创建的可执行文件,那么它运行正常。但是如果我在发布模式下运行visual studio创建的可执行文件,那么gui工作正常,除了QImage save()函数不再起作用。如果我使用OpenCV函数来保存帧,那么它在所有模式下都能正常工作。我想保存的QImage不是Null,因为我的注释文本框显示我在里面打印的行,但是save函数返回false。我真的很感激帮助。
这是一个小代码:
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");
}
}
答案 0 :(得分:4)
我遇到了与QImage :: load()相同的问题。我将发布alexisdm链接中指出的解决方案的副本,以使其更清晰。
在windows下,qjpeg4.dll必须位于imageformats目录下 默认情况下应用程序的目录。
谢谢!
答案 1 :(得分: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);