常用方法:
这个对于IplImage向QImage转换是一个非常重要的功能!
因为我们可以用下面的语句直接从IplImage构造QImage, 避免重复复制数据.
彩色图像:
IplImage *img = cvLoadImage("lena.jpg", 1);
QImage qImage(img->imageData, img->width, img->height,img->widthStep, QImage::Format_RGB888);
灰度图像:
IplImage *pImg2 = cvCreateImage(cvGetSize(pImg),8,1);
QImage qimage((unsigned char * )pImg2->imageDataOrigin,pImg2->width,pImg2->height,QImage::Format_Indexed8);
如果在显示 单通道灰度图 时,图像错位(斜偏移),
1、这时可以把 单通道 转为 3通道 图。如下:
外部输入 disp 为 单通道CvMat矩阵
IplImage img, *pImg;
pImg = cvGetImage( disp, &img );
IplImage *pImg2 = cvCreateImage( cvGetSize(pImg), 8, 3);
cvCvtColor( pImg, pImg2, CV_GRAY2BGR );
QImage qimage( (unsigned char * )pImg2->imageDataOrigin, pImg2->width, pImg2->height, QImage::Format_RGB888/*QImage::Format_Indexed8*/); //图像会错位
2、在初始化qimage 时,加上widthstep,如 上面彩色图像的转换。结果如下:
QImage qimage( (unsigned char * )pImg->imageDataOrigin, pImg->width, pImg2->height, pImg->widthStep, QImage::Format_Indexed8);
在 Qt 中显示:
int main ( int argc, char *argv[] )
{
QApplication app(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("Enter your age");
// QImage-------〉QPixmap-------〉QLabel
QLabel *label = new QLabel;
QPixmap lpmap;
label->setPixmap(lpmap.fromImage(qimage,0));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget( label );
window->setLayout( layout );
window->show();
return app.exec();
}