Qt 用QLabel显示IplImage图像数据

SuperHeroMario 2018-04-03 01:56:59
我知道在Qt中想用QLabel显示IplImage图像数据需要先转化成QImage类型,但是我对转换的原理不是很清楚,图像数据的通道数、位深、相机的彩色黑白都应该怎么转换?
下面是我从网上找的的代码:
QImage* IplImage2QImage(IplImage *iplImg)
{
int h = iplImg->height;
int w = iplImg->width;
int channels = iplImg->nChannels;

QImage *qimg = new QImage(w, h, QImage::Format_RGB888);
char *data = iplImg->imageData;

for (int y = 0; y < h; y++, data += iplImg->widthStep)
{
for (int x = 0; x < w; x++)
{
char r, g, b, a = 0;
if (channels == 1)
{
r = data[x * channels];
g = data[x * channels];
b = data[x * channels];
}
else if (channels == 3 || channels == 4)
{
r = data[x * channels + 2];
g = data[x * channels + 1];
b = data[x * channels];
}

if (channels == 4)
{
a = data[x * channels + 3];
qimg->setPixel(x, y, qRgba(r, g, b, a));
}
else
{
qimg->setPixel(x, y, qRgb(r, g, b));
}
}
}
return qimg;

}

void Guider::GetSingleFrame()
{
ImgData = (unsigned char *)malloc(length);
memset(ImgData,0,length);
ret = GetFrame(camhandle,&imagew,&imageh,&bpp,&channels,ImgData);
if(ret == SUCCESS){
IplImage *image = cvCreateImage(cvSize(imagew,imageh),bpp,channels);
image->imageData = (char *)ImgData;

IplImage *dst;
CvSize dst_cvsize;

dst_cvsize.width = ui->img_lpl->width();
dst_cvsize.height = ui->img_lpl->height();

dst = cvCreateImage(dst_cvsize,image->depth,image->nChannels);
cvResize(image,dst,CV_INTER_LINEAR);

qImg_capture = IplImage2QImage(dst);

ui->img_lpl->setPixmap(QPixmap::fromImage(*qImg_capture));
ui->img_lpl->show();
}
}
这个只能显示8位一通道的黑白图像,显示其他的就会出问题。
...全文
2157 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhgaven 2018-08-15
  • 打赏
  • 举报
回复
你是用opencv显示视频吧, cvCvtColor(iplImg,iplImg,CV_BGR2RGB); uchar *imgData = (uchar *)iplImg->imageData; img = QImage(imgData, iplImg->width, iplImg->height, QImage::Format_RGB888);
萧洛 2018-08-02
  • 打赏
  • 举报
回复
使用 QImage::fromData(const uchar *data, int size, const char *format = Q_NULLPTR),第三个参数不用填,自动检测格式。
把图片数据的开始地址及数据大小传入就可以了,IplImage中可以得到这两个参数。
多看看qt Assistant,这是基本的。
加盾男爵 2018-08-01
  • 打赏
  • 举报
回复
你opencv用的是什么版本,现在都用cv::Mat了吧
网上搜cv::Mat转QImage,资料一大把
wasonic 2018-07-31
  • 打赏
  • 举报
回复
不知道这个是不是你想要的:https://blog.csdn.net/seanwang_25/article/details/18667411
SuperHeroMario 2018-04-20
  • 打赏
  • 举报
回复
没人么,随便来个人也行啊

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧