本文主要讲的是怎样将2幅图片叠加,就像电影里面有时候出现的镜头一样,2幅图片可以按照不同比例重叠,当然这里主要是利用opencv自带的函数addWeighted().参考资料为opencv自带tutiol及其代码。 开发环境:ubuntu12.04+opencv2.4.2+Qt4.8.2+QtCreator2.5. 实验功能: 单击Open image1按钮,打开第1幅图片并在左边显示出来。 单击Open image2按钮,打开第2幅图片并在中间显示出来。 在Alpha栏输入第1幅图片在图片混合时所占的比例,这时Beta栏的值也会跟着改变,因为2着的比例之和为1.0. 同理,在Beta栏中输入第2幅图片在图片混合时所占的比例,这时Alpha栏里的值也会改变。 单击Add image按钮,在软件右边那栏可以看到图片混合的效果。 实验说明: addWeighted()函数的第1个参数为输入图片1,第2个参数为图片1的系数,参数3为输入图片2,参数4为图片2的系数。其实这2个系数之和没有必要为1,我这里在程序中定为1是防止图片出现过饱和等情况。参数5为混合后图片的深度,如果图片1和图片2深度相同的话,则该参数为-1. 最后1个参数为输出混合图片结果保存处。 获得LineEdit的值是调用其text()函数,然后转换成相应的数据类型即可. QPalette为调色版,其颜色组分为3组,活动组,非活动组,不可用组;其中活动组为当前窗口所在组,非活动组为其它窗口所在组,不可用组是由于某种原因暂时不能使用的 组 。改变调色版的颜色可以使用setColor这个函数,这个函数有2个重载函数,其中参数ColorRole表示是更改哪个参数;比如说一般的背景色。 EditLine背景色颜色角色为QPalette::Base;前景色文字的颜色角色为QPalette::Text. Button背景色颜色角色为QPalette::Button.前景色文字的颜色角色为QPalette::ButtonText. Label前景文字颜色角色为QPalette::WindowText. 实验结果: 图片1和图片2权重比为1:9时混合效果: 图片1和图片2权重比为1:1时混合效果:
图片1和图片2权重比为9:1时混合效果:
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include
- #include
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- alpha = 0.50;
- beta = 0.50;
- /*QPalette为调色版,其颜色组分为3组,活动组,非活动组,不可用组;其中活动组为当前窗口所在组,非活动组为其它窗口所在组,不可
- 用组是由于某种原因暂时不能使用的组
- 改变调色版的颜色可以使用setColor这个函数,这个函数有2个重载函数,其中参数ColorRole表示是更改哪个参数;比如说一般的背景色
- 就是QPalette::base,这里的文字颜色为QPalette::Text*/
- QPalette pal_editline;
- pal_editline.setColor( QPalette::Text, Qt::green );
- pal_editline.setColor( QPalette::Base, Qt::black );
- ui->alphaEdit->setPalette( pal_editline );
- ui->betaEdit->setPalette( pal_editline );
- // ui->img1Browser->setStyleSheet( "background-color:black" );
- // ui->img2Browser->setStyleSheet( "background-color:balck" );
- //改变label的文字颜色
- QPalette pal_label;
- pal_label.setColor( QPalette::WindowText, Qt::red );//这里要用WindowText,因为这是Labl上的文字
- ui->alphaLabel->setPalette( pal_label );
- ui->betaLabel->setPalette( pal_label );
- //改变button上的文字颜色
- QPalette pal_button;
- pal_button.setColor( QPalette::ButtonText, Qt::green );
- pal_button.setColor( QPalette::Button, Qt::black );
- ui->closeButton->setPalette( pal_button );
- ui->open1Button->setPalette( pal_button );
- ui->open2Button->setPalette( pal_button );
- ui->addButton->setPalette( pal_button );
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::on_closeButton_clicked()
- {
- close();
- }
- void MainWindow::on_open1Button_clicked()
- {
- QString qimg1 = QFileDialog::getOpenFileName( this, "Open image1", "../", tr("Image Files( *.png *.jpeg *.jpg *.bmp)") );
- img1 = imread( qimg1.toAscii().data() );
- ui->img1Browser->clear();
- ui->img1Browser->append( tr("").arg( qimg1 ) );
- }
- void MainWindow::on_open2Button_clicked()
- {
- QString qimg2 = QFileDialog::getOpenFileName( this, "Open image1", "../", tr("Image Files( *.png *.jpeg *.jpg *.bmp)") );
- img2 = imread( qimg2.toAscii().data() );
- ui->img2Browser->clear();
- ui->img2Browser->append( tr("").arg( qimg2 ) );
- }
- void MainWindow::on_addButton_clicked()
- {
- addWeighted( img1, alpha, img2, beta, 0.0, img3 );//图像混合的函数
- imwrite( "../add_img.jpg", img3 );
- ui->img3Browser->clear();
- ui->img3Browser->append( "" );
- }
- void MainWindow::on_betaEdit_editingFinished()
- {
- beta = ui->betaEdit->text().toFloat();//对于LineEdit是用text函数获得其内容
- alpha = 1.0 - beta;
- ui->alphaEdit->setText( QString("%1").arg(alpha) );//回车后alpha的值也会改变,且满足2之和为1.0
- }
- void MainWindow::on_alphaEdit_editingFinished()
- {
- alpha = ui->alphaEdit->text().toFloat();
- beta = 1.0 - alpha;
- ui->betaEdit->setText( QString("%1").arg(beta) );
- }
复制代码
转自: http://www.cnblogs.com/tornadome ... /07/23/2605719.html
0
|
|
|
|