imageData=(字符*)图像; 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); },c++,qt,opencv,C++,Qt,Opencv" /> imageData=(字符*)图像; 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); },c++,qt,opencv,C++,Qt,Opencv" />

从文件夹加载文件并保存到另一个文件夹 我用Visual C++使用OpenCV(2.3版本)和QT(4.8版本)编写,并且我从文件夹中加载文件(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); } for(uint i=0;i加载(str); IplImage*currentImage=cvCreateImageHeader(cv::Size(640480),IPL_DEPTH_8U,1);//1通道xk黑白(单独亮度) currentImage->imageData=(字符*)图像; 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); }

从文件夹加载文件并保存到另一个文件夹 我用Visual C++使用OpenCV(2.3版本)和QT(4.8版本)编写,并且我从文件夹中加载文件(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); } for(uint i=0;i加载(str); IplImage*currentImage=cvCreateImageHeader(cv::Size(640480),IPL_DEPTH_8U,1);//1通道xk黑白(单独亮度) currentImage->imageData=(字符*)图像; 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); },c++,qt,opencv,C++,Qt,Opencv,问题是,当我打开保存文件夹(imm_calibration)中的jpg图像时,它们与原始图像完全不同。错误在哪里? 提前谢谢 currentImage->imageData = (char*)image; 这确实令人怀疑。您正在将QImage*转换为char*。要做的第一件事就是换成 currentImage->imageData = image->bits(); 为了使用缓冲区。 另一件事,您正在使用固定值创建currentImage,也许使用它更好 cvCreateIm

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

currentImage->imageData = (char*)image;
这确实令人怀疑。您正在将
QImage*
转换为
char*
。要做的第一件事就是换成

currentImage->imageData = image->bits();
为了使用缓冲区。 另一件事,您正在使用固定值创建
currentImage
,也许使用它更好

cvCreateImageHeader(cv::Size(image->width(),image->height(),....)
这是用于qt部分的。这可能还不够

这确实令人怀疑。您正在将
QImage*
转换为
char*
。要做的第一件事就是换成

currentImage->imageData = image->bits();
为了使用缓冲区。 另一件事,您正在使用固定值创建
currentImage
,也许使用它更好

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

这是用于qt部分的。这可能还不够。

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