QT中怎么使用8位索引来显示图像?用RGB888可以把灰度图用drawImage画出来,自己的编了一段代码出不来。 130
由于是视频的采集显示,下面定义的函数会以一定时间调用一次,这里假设为时间t,可以不用理会这个函数调用多少次,这里现在是考虑单帧图像的显示问题。voidpaintEvent...
由于是视频的采集显示,下面定义的函数会以一定时间调用一次,这里假设为时间t,可以不用理会这个函数调用多少次,这里现在是考虑单帧图像的显示问题。
void paintEvent(QPaintEvent *event)//定义了一个画图函数一次
{
uchar rgbhuidu[320*240*3];//rgbhuidu内存储的数据会以时间t更新,这里也不理会数据更新,考虑一帧的情况
QPainter *painter=new QPainter(this);
QImage *image=new QImage(rgbhuidu,320,240,QImage::Format_rgb888);
Qimage image2=*image;
painter->drawImage(10,10,image2,0,0,320,240);
}
上面这个代码可以显示出灰度图,但是是用rgb888显示的
void paintEvent(QPaintEvent *event)//定义了一个画图函数
{uchar rgbhuidu[320*240*3];//rgb888的灰度图数据存放在rgbhuidu数组中,该数组内的r,g,b三个分量已经相等,数组中的数据以一定的时间更新,这里可以不管它是否更新,我们只考虑一帧的数据处理
uchar r[320*240];
for(j=0;j<320*240;i++)
{
r[j]=rgbhuidu[3*j];
}
QPainter *painter=new QPainter(this);
QImage *image=new QImage(r,320,240,QImage::Format_Indexed8);//r是每一帧的灰度图像的red分量,rgb888 //图像的三个分量已经相等,现在是想把他转成8位索引图像,以节省空间和数据的运算。
QVector<QRgb>grayColorTable; //制作索引表
uint rgb=0;
for(inti=0;i<256;i++)
{ grayColorTable.append(rgb);
rgb+=0x00010101; }//这里为什么要对rgb进行这个加法?而且在网上看到的代码都
//是用彩色图像的绿色分量来做索引值,但是我这里获得到的图像r,g,b的分量已经相
//等了,所以我用任意一个分量做索引值都是可以的
Qimage image2=*image;
image2.setColorTable(grayColorTable);//设置索引表
painter->drawImage(10,10,image2,0,0,320,240);//把图像用drawImage画出来
}
上面这段代码编译通过,但是在原本应该在widget里指定的位置显示一幅320*240灰度图,但是指定的位置什么也不显示,只有背景,好像是数据没有写入到image2?要不应该会显示一些图像的呀?
QT采集视频时已经把可以把每帧图像转换成rgb888的灰度图像(r,g,b三个分量已经相等),想把它转成八位索引灰度图像,以节省内存空间和运算量,上面是自己编写的部分代码,但是转换后窗口里什么也没有,不知道是怎么回事?求高手帮忙,看看问题出在哪了?http://www.oschina.net/code/snippet_96486_4027这是我在论坛上看到的转灰度图像的例子,但是我一直没有搞明白为什么就要以绿色分量作为索引值,我把它换成了红色或蓝色分量后出来的图像都是有问题的,是不是和rgb+=0x00010101有关系?这里他用到了grayImage.save(grayFile);来保存数据,我试了下如果把这句删了得不到灰度图像,我不需要保存下来图片,只需要把他显示出来就可以了。
每获取一帧图像就要调用本函数来画图,索引值表可以不放在这个函数里面吗?放在这个函数里就相当于每一帧的图像都创建了一次索引值表,可不可以放在头文件定义索引值表或者说是在类中先定义好灰度图索引值表?
还有在QT中画矩形怎么设置矩形的颜色和线宽?用setpen()不好使,颜色没有多大的改变,线宽也没有变,不知道是不是由于我的图像本身就是灰度的原因,索引颜色不变,但是线宽我都10调到50了,他还是没有一点反应;线宽都不改变,我的部分代码
painter.setpen(Qt::black,15);
painter.drawRect(0,0,320,240);到底是怎么回事? 展开
void paintEvent(QPaintEvent *event)//定义了一个画图函数一次
{
uchar rgbhuidu[320*240*3];//rgbhuidu内存储的数据会以时间t更新,这里也不理会数据更新,考虑一帧的情况
QPainter *painter=new QPainter(this);
QImage *image=new QImage(rgbhuidu,320,240,QImage::Format_rgb888);
Qimage image2=*image;
painter->drawImage(10,10,image2,0,0,320,240);
}
上面这个代码可以显示出灰度图,但是是用rgb888显示的
void paintEvent(QPaintEvent *event)//定义了一个画图函数
{uchar rgbhuidu[320*240*3];//rgb888的灰度图数据存放在rgbhuidu数组中,该数组内的r,g,b三个分量已经相等,数组中的数据以一定的时间更新,这里可以不管它是否更新,我们只考虑一帧的数据处理
uchar r[320*240];
for(j=0;j<320*240;i++)
{
r[j]=rgbhuidu[3*j];
}
QPainter *painter=new QPainter(this);
QImage *image=new QImage(r,320,240,QImage::Format_Indexed8);//r是每一帧的灰度图像的red分量,rgb888 //图像的三个分量已经相等,现在是想把他转成8位索引图像,以节省空间和数据的运算。
QVector<QRgb>grayColorTable; //制作索引表
uint rgb=0;
for(inti=0;i<256;i++)
{ grayColorTable.append(rgb);
rgb+=0x00010101; }//这里为什么要对rgb进行这个加法?而且在网上看到的代码都
//是用彩色图像的绿色分量来做索引值,但是我这里获得到的图像r,g,b的分量已经相
//等了,所以我用任意一个分量做索引值都是可以的
Qimage image2=*image;
image2.setColorTable(grayColorTable);//设置索引表
painter->drawImage(10,10,image2,0,0,320,240);//把图像用drawImage画出来
}
上面这段代码编译通过,但是在原本应该在widget里指定的位置显示一幅320*240灰度图,但是指定的位置什么也不显示,只有背景,好像是数据没有写入到image2?要不应该会显示一些图像的呀?
QT采集视频时已经把可以把每帧图像转换成rgb888的灰度图像(r,g,b三个分量已经相等),想把它转成八位索引灰度图像,以节省内存空间和运算量,上面是自己编写的部分代码,但是转换后窗口里什么也没有,不知道是怎么回事?求高手帮忙,看看问题出在哪了?http://www.oschina.net/code/snippet_96486_4027这是我在论坛上看到的转灰度图像的例子,但是我一直没有搞明白为什么就要以绿色分量作为索引值,我把它换成了红色或蓝色分量后出来的图像都是有问题的,是不是和rgb+=0x00010101有关系?这里他用到了grayImage.save(grayFile);来保存数据,我试了下如果把这句删了得不到灰度图像,我不需要保存下来图片,只需要把他显示出来就可以了。
每获取一帧图像就要调用本函数来画图,索引值表可以不放在这个函数里面吗?放在这个函数里就相当于每一帧的图像都创建了一次索引值表,可不可以放在头文件定义索引值表或者说是在类中先定义好灰度图索引值表?
还有在QT中画矩形怎么设置矩形的颜色和线宽?用setpen()不好使,颜色没有多大的改变,线宽也没有变,不知道是不是由于我的图像本身就是灰度的原因,索引颜色不变,但是线宽我都10调到50了,他还是没有一点反应;线宽都不改变,我的部分代码
painter.setpen(Qt::black,15);
painter.drawRect(0,0,320,240);到底是怎么回事? 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询