【问题标题】:load a file from a folder and save to another one从文件夹加载文件并保存到另一个
【发布时间】:2012-11-13 13:12:11
【问题描述】:

我正在使用 opencv(2.3 版本)和 qt(4.8 版本)使用 Visual c++ 编写,我在从文件夹加载文件(jpg 图像)并保存到另一个文件夹时遇到了一些问题。这是我的代码:

for (uint i = 0; i < numFiles; i += (numFiles / numBoards) ){

    QString str = "D:/TESI_Magistrale/Linescanner/imm_aquisition/image" + QString::number(i + 1) + ".jpg";
    QImage *image=new QImage();
    image->load(str);


    IplImage *currentImage = cvCreateImageHeader(cv::Size(640,480),IPL_DEPTH_8U,1);//1 channel xk b&w (solo brightness)
    currentImage->imageData = (char*)image;

    QString str1 = "D:/TESI_Magistrale/Linescanner/imm_calibration/image" + QString::number(i + 1) + ".jpg";
    QByteArray ba1 = str1.toLatin1();
    const char *text1 = ba1.data();
    cvSaveImage(text1,currentImage);


}

问题是当我打开保存文件夹(imm_calibration)中的jpg图像时,它们与原始图像完全不同。错误在哪里? 提前致谢。

【问题讨论】:

  • 为什么不通过操作系统将它们复制为文件?
  • 你为什么用qt加载,打开cv保存?您当然可以使用 qt 或 opencv 进行这两种操作
  • 因为在另一个代码中不起作用!但是现在使用 image->save() 就可以了!非常感谢 UmNyobe!
  • 接受答案然后... :D

标签: c++ qt opencv


【解决方案1】:
currentImage->imageData = (char*)image;

这确实很可疑。您正在将 QImage* 转换为 char*。首先要做的是更改为

currentImage->imageData = image->bits();

为了使用缓冲区。 另一件事,您正在创建具有固定值的currentImage,也许最好使用

cvCreateImageHeader(cv::Size(image->width(),image->height(),....)

这是针对 qt 部分的。可能还不够。

【讨论】:

    猜你喜欢
    • 2021-01-07
    • 1970-01-01
    • 2023-03-27
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2020-01-03
    相关资源
    最近更新 更多