我使用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图像时,它们与原始文件完全不同。错误在哪里? 提前谢谢。
答案 0 :(得分:1)
currentImage->imageData = (char*)image;
这当然是非常可疑的。您要将QImage*
转换为char*
。首先要做的是改为
currentImage->imageData = image->bits();
为了使用缓冲区。
另外,您使用固定值创建currentImage
,也许最好使用
cvCreateImageHeader(cv::Size(image->width(),image->height(),....)
这是针对qt部分的。它可能还不够。