您的位置:首页 > 其它

QImage 和 IplImage 之间转换问题

2012-02-14 23:59 337 查看
QImageIplImage 之间转换问题:

常用方法:

这个对于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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: