qt-salvar imagem no local
- No Qt, geralmente precisamos salvar imagens em arquivos locais e também podemos precisar criar um diretório antes de salvar as imagens para facilitar o gerenciamento. Este artigo apresentará como usar o Qt para criar um diretório ao salvar imagens e salvar imagens neste diretório.
- Forneceremos dois exemplos: um é usar a imagem do tipo 'QPixmapcv::Mat.
1. Use uma imagem do tipo QPixmap
Vamos primeiro apresentar como usar imagens do tipo 'QPixmap para implementar a função de criar um diretório ao salvar uma imagem. Aqui está uma função de exemplo que faz isso
Copy code
#include <QPixmap>
#include <QFileDialog>
#include <QDateTime>
#include <QDir>
#include <QImageWriter>
void saveImage(QPixmap pixmap)
{
// 获取当前日期和时间并将其格式化为字符串格式
QString dateTime = QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss");
// 将文件名设置为当前时间
QString fileName = "image-" + dateTime + ".png";
// 打开文件对话框以选择文件保存路径
QString filePath = QFileDialog::getSaveFileName(nullptr, "Save Image", fileName, "Images (*.png *.bmp *.jpg)");
if (!filePath.isEmpty()) {
// 创建目录
QString directory = QFileInfo(filePath).dir().path() + "/image";
QDir().mkpath(directory);
// 在目录中保存图像到文件
filePath = directory + "/" + fileName;
QImageWriter writer(filePath);
writer.setFormat("PNG"); // 指定图像格式
writer.write(pixmap.toImage());
}
}
Neste exemplo, primeiro usamos a classe QDateTime para obter a data e hora atuais e formatá-las em um formato de string. Em seguida, usamos a classe QFileDialog para abrir uma caixa de diálogo de arquivo para selecionar um caminho para salvar o arquivo. Se o usuário escolher um caminho para salvar o arquivo, passamos o caminho do arquivo para o método mkpath() da classe QDir para criar um diretório chamado "image". Em seguida, alteramos o caminho do arquivo para o caminho onde salvamos o arquivo no diretório 'image' e usamos a classe 'QImageWriterQImageWriter para salvar a imagem no arquivo.
2. Use a imagem do tipo cv::Mat
Se estiver salvando uma imagem do tipo cv::Mat, você pode convertê-la em um QImage e, em seguida, usar um QImageWriter para salvá-la em um arquivo.
Aqui está uma função de exemplo:
#include <QPixmap>
#include <QFileDialog>
#include <QDateTime>
#include <QDir>
#include <QImageWriter>
#include <QImage>
void saveImage(cv::Mat image)
{
// 将 cv::Mat 转换为 QImage
QImage qimage(image.data, image.cols, image.rows, static_cast<int>(image.step), QImage::Format_RGB888);
qimage = qimage.rgbSwapped(); // 进行 RGB/BGR 转换
// 获取当前日期和时间并将其格式化为字符串格式
QString dateTime = QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss");
// 将文件名设置为当前
QString fileName = "image-" + dateTime + ".png";
// 打开文件对话框以选择文件保存路径
QString filePath = QFileDialog::getSaveFileName(nullptr, "Save Image", fileName, "Images (*.png *.bmp *.jpg)");
if (!filePath.isEmpty()) {
// 创建目录
QString directory = QFileInfo(filePath).dir().path() + "/image";
QDir().mkpath(directory);
// 在目录中保存图像到文件
filePath = directory + "/" + fileName;
QImageWriter writer(filePath);
writer.setFormat("PNG"); // 指定图像格式
writer.write(qimage);
}
- Neste exemplo, primeiro convertemos
cv::Mat
uma imagem do tipo paraQImage
. Em seguida, seguimos os mesmos passos do exemplo anterior, usandoQFileDialog
a caixa de diálogo abrir arquivo para selecionar o caminho para salvar o arquivo, criar um diretório chamado "imagem" eQImageWriter
salvar a imagem no arquivo usando a classe. - Observe que, como o formato padrão de cv::Mat é BGR e o formato padrão de QImage é RGB, precisamos usar o
rgbSwapped()
método para conversão RGB/BGR. - Usamos
QImage
no quarto parâmetro do construtorstatic_cast<int>(image.step)
para obter o número de bytes por linha da imagem. UsergbSwapped()
o método de conversão RGB/BGR para garantir que a imagem seja salva com as cores corretas.