qt把html数据流转换成qimage,实现Qt中QImage和IplImage的相互转换功能

CvxQtWrap.h

#ifndef OPENCV_CVX_QT_WRAP_2008_05_18_H

#define OPENCV_CVX_QT_WRAP_2008_05_18_H

#include

#include

/**

\file CvxQtWrap.h

\brief Qt和OpenCV接口

\author 柴树杉(chaishushan@gmail.com)

提供了QImage和IplImage之间的转换支持.

*/

/**

\brief QImage复制到IplImage

将qImage复制到pIplImage. 如果pIplImage为NULL的话, 则创建和qImage

大小一致的3通道IPL_DEPTH_8U类型的IplImage图像, 然后复制.

测试代码:

\code

QImage qImage;

if(qImage.load("lena.jpg"))

{

IplImage *image = cvxCopyQImage(qImage);

cvSaveImage("cvxCopyQImage.bmp", image);

}

\endcode

\param qImage    输入图像

\param pIplImage 输出图像

\return 返回输出的IplImage格式图像

*/

IplImage* cvxCopyQImage(const QImage &qImage, IplImage *pIplImage=0);

/**

\brief IplImage复制到QImage

将pIplImage复制到qImage. 如果qImage为空的话, 则调整qImage和

pIplImage大小一致, 然后复制.

测试代码:

\code

IplImage *image = cvLoadImage("lena.jpg", 1);

if(image)

{

QImage qImage;

cvxCopyIplImage(image, qImage);

qImage.save("cvxCopyIplImage.bmp");

}

\endcode

\param pIplImage 输入图像

\param qImage    输出图像

\return 返回输出的QImage图像

*/

QImage&   cvxCopyIplImage(const IplImage *pIplImage, QImage &qImage);

#endif   // OPENCV_CVX_QT_WRAP_2008_05_18_H

CvxQtWrap.cpp

#include "CvxQtWrap.h"

IplImage *cvxCopyQImage(const QImage &qImage, IplImage *pIplImage)

{

if(qImage.isNull()) return pIplImage;

// 创建IplImage

if(!pIplImage)

{

int w = qImage.width();

int h = qImage.height();

pIplImage = cvCreateImage(cvSize(w,h), IPL_DEPTH_8U, 3);

if(!pIplImage) return NULL;

}

// 复制像素

int x, y;

for(x = 0; x < pIplImage->width; ++x)

{

for(y = 0; y < pIplImage->height; ++y)

{

QRgb rgb = qImage.pixel(x, y);

cvSet2D(pIplImage, y, x, CV_RGB(qRed(rgb), qGreen(rgb), qBlue(rgb)));

}

}

return pIplImage;

}

QImage& cvxCopyIplImage(const IplImage *pIplImage, QImage &qImage)

{

if(!pIplImage) return qImage;

// 调整qImage的大小

if(qImage.isNull())

{

int w = pIplImage->width;

int h = pIplImage->height;

qImage = QImage(w, h, QImage::Format_RGB32);

}

// 复制像素

int x, y;

for(x = 0; x < pIplImage->width; ++x)

{

for(y = 0; y < pIplImage->height; ++y)

{

CvScalar color = cvGet2D(pIplImage, y, x);

int r = color.val[2];

int g = color.val[1];

int b = color.val[0];

qImage.setPixel(x, y, qRgb(r,g,b));

}

}

return qImage;

}

QImage增加Format_RGB888格式, 每个像素占24bit

http://trolltech.com/developer/resource ... ges-4.4.0/

这个对于IplImage向QImage转换是一个非常重要的功能!

因为我们可以用下面的语句直接从IplImage构造QImage, 避免重复复制数据.

IplImage *img = cvLoadImage("lena.jpg", 1);

QImage qImage(img->imageData, img->width, img->height, img->widthStep, QImage::Format_RGB888);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值