QT配合OpenCV完成图像处理时,经常使用QT显示OpenCV处理的图像数据,下面列出常用的一些转换函数,方便OpenCV与QT之间转换。
适用的OpenCV的版本:OpenCV3.X和OpenCV2.X版本。
(1) 将QImage图片转为opecv的qimage格式
IplImage *Widget::QImage_to_IplImage(const QImage * qImage)
{
int width = qImage->width();
int height = qImage->height();
CvSize Size;
Size.height = height;
Size.width = width;
IplImage *IplImageBuffer = cvCreateImage(Size, IPL_DEPTH_8U, 3);
for (int y = 0; y < height; ++y)
{
for (int x = 0; x < width; ++x)
{
QRgb rgb = qImage->pixel(x, y);
CV_IMAGE_ELEM( IplImageBuffer, uchar, y, x*3+0 ) = qBlue(rgb);
CV_IMAGE_ELEM( IplImageBuffer, uchar, y, x*3+1 ) = qGreen(rgb);
CV_IMAGE_ELEM( IplImageBuffer, uchar, y, x*3+2 ) = qRed(rgb);
}
}
return IplImageBuffer;
}
(2). 将opecv的图片转为qimage格式
QImage *Widget::IplImage_to_QImage(IplImage *img)
{
QImage *qmg;
uchar *imgData=(uchar *)img->imageData;
qmg = new QImage(imgData,img->width,img->height,QImage::Format_RGB888);
*qmg=qmg->rgbSwapped(); //BGR格式转RGB
return qmg;
}
(3). 将QImage图片转为Mat格式
Mat Widget::QImage_to_cvMat(QImage image)
{
Mat mat;
switch(image.format())
{
case QImage::Format_ARGB32:
case QImage::Format_RGB32:
case QImage::Format_ARGB32_Premultiplied:
mat = Mat(image.height(), image.width(), CV_8UC4, (void*)image.constBits(), image.bytesPerLine());
break;
case QImage::Format_RGB888:
mat = Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), image.bytesPerLine());
cvtColor(mat, mat, CV_BGR2RGB);
break;
case QImage::Format_Indexed8:
mat = Mat(image.height(), image.width(), CV_8UC1, (void*)image.constBits(), image.bytesPerLine());
break;
}
return mat;
}
(4). 将Mat图片转为QImage格式
QImage Widget::Mat_to_QImage(const Mat& InputMat)
{
Mat TmpMat;
if (InputMat.channels() == 1)
{
cvtColor(InputMat, TmpMat, CV_GRAY2RGB);
}
else
{
cv::cvtColor(InputMat, TmpMat, CV_BGR2RGB);
}
QImage Result = QImage((const uchar*)(TmpMat.data), TmpMat.cols, TmpMat.rows,QImage::Format_RGB888);
Result.bits();
return Result;
}
(5). QLabel显示函数
//显示检测的结果
void Widget::show_face(IplImage* img)
{
uchar *imgData=(uchar *)img->imageData;
QImage my_image=QImage(imgData,img->width,img->height,QImage::Format_RGB888);
my_image=my_image.rgbSwapped(); //BGR格式转RGB
QPixmap my_pix; //创建画图类
my_pix.convertFromImage(my_image);
/*在控件上显示*/
ui->label_display->setPixmap(my_pix);
}
在QT框架里开发OpenCV,为了方便调用OpenCV里的函数,记得要在头文件声明OpenCV的命名空间,不然每次调用函数都得cv::xxxx。
using namespace cv;
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
这是 OpenCV与QT开发时常有的一些转换函数。 比如: (1) 将QImage图片转为opecv的qimage格式 IplImage *Widget::QImage_to_IplImage(const QImage * qImage) (2). 将opecv的图片转为qimage格式 QImage *Widget::IplImage_to_QImage(IplImage *img) (3). 将QImage图片转为Mat格式 Mat Widget::QImage_to_cvMat(QImage image) (4). 将Mat图片转为QImage格式 QImage Widget::Mat_to_QImage(const Mat& InputMat) (5). QLabel显示函数 void Widget::show_face(IplImage* img)
资源推荐
资源详情
资源评论
收起资源包目录
02 OpenCV与QT开发时一些转换函数.zip (1个子文件)
02 OpenCV与QT开发时一些转换函数
OpenCV与QT开发时一些转换函数.c 3KB
共 1 条
- 1
资源评论
DS小龙哥
- 粉丝: 4w+
- 资源: 522
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Android的学生信息管理2.rar
- 3e9ef566-ba13-47b0-a252-77aa9e4b040f8412130.apk
- 毕业设计基于SSM的房屋租赁系统源【源码+lw+部署+讲解】
- 基于Android男装出口管理系统的app.rar
- 工资表生成工资条Excel模版
- 位运算、状态压缩、枚举子集汇总.html
- C++毕业设计快递分拣机器人系统源码+论文文件+资料.zip
- 锐龙处理器 体质分析工具,体质越好越稳定,越容易超频 tool1007/Win V/F
- IOS Swift3 四种单例模式详解及实例《PPT文档》
- Swin-Unet网络预训练模型,swin-tiny-patch-window7-224.pth
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功