opencv 图片合并

  1. addWeighted(InputArray Src1, int alpth, InputArray Src2, int beta, InputArray dst);

alpth + beta = 1 权重(调节透明度)

当 alpth = 0, 显示Src2

cpp 复制代码
QString imgpath1 = "xxxxxxxx";
QString imgpath2 = "xxxxxxxxx";

Mat imgSrc1 = imread(imgpath1.toStdString());
Mat imgSrc2 = imread(imgpath2,toStdString());

Mat imgDst;
cvtColor(imgSrc1, imgSrc1, COLOR_BGR2RGB);
cvtColor(imgSrc2, imgSrc2, COLOR_BGR2RGB);

addWeighted(imgSrc1, 0.5, imgSrc2, 0.5, imgDst);


QImage myQimg = QImage((const unsigned char*)imgDst.data(), imgDst.cols, imgDst.rows, static_cast<int>(imgDst.step), QImage::Format_RGB888);

ui->lable->setPixmap(QPixmap::fromImage(myQimg.scaled(ui->lable0>size())));

blend.h

cpp 复制代码
#ifndef BLEND_H
#define BLEND_H

#include <QWidget>
#include <opencv2/opencv.hpp>

using namespace cv;
namespace Ui {
class Blend;
}

class Blend : public QWidget
{
    Q_OBJECT

public:
    explicit Blend(QWidget *parent = nullptr);
    ~Blend();

    void initMainWindow();
    void imgShow();
    void imgProc(double value);

private slots:
    void on_verticalSlider_valueChanged(int value);

private:
    Ui::Blend *ui;

    Mat myImg;
    QImage myQImg;

    Mat imgSrc2;
    Mat imgSrc1;
};

#endif // BLEND_H

blend.cpp

cpp 复制代码
#include "blend.h"
#include "ui_blend.h"

#include <QDebug>
Blend::Blend(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Blend)
{
    qDebug() << __func__;
    ui->setupUi(this);
    qDebug() << __func__ <<__LINE__;
    setFixedSize(682,474);

    initMainWindow();
}

Blend::~Blend()
{
    delete ui;
}

void Blend::initMainWindow()
{
    ui->label->resize(631,456);
    QString imgPath = R"(D:\new_share\016_opencv\OpencvBlend\2.jpg)";
    Mat img = imread(imgPath.toStdString());
    cvtColor(img,img,COLOR_BGR2RGB);
    myImg = img;
    myQImg = QImage((const unsigned char*)img.data, img.cols, img.rows, static_cast<int>(img.step), QImage::Format_RGB888).copy();

    imgSrc1 = myImg;

    QString img2 = R"(D:\new_share\016_opencv\OpencvBlend\1.webp)";
    imgSrc2 = imread(img2.toStdString());
    cvtColor(imgSrc2, imgSrc2, COLOR_BGR2RGB);

    imgShow();
}

void Blend::imgShow()
{
    ui->label->setPixmap(QPixmap::fromImage(myQImg.scaled(ui->label->size())));
}

void Blend::imgProc(double value)
{
    Mat imgDst;
    addWeighted(imgSrc2, value, imgSrc1, 1-value, 0, imgDst);

    myQImg = QImage((const unsigned char*)imgDst.data, imgDst.cols, imgDst.rows,static_cast<int>(imgDst.step), QImage::Format_RGB888).copy();
    imgShow();
}

void Blend::on_verticalSlider_valueChanged(int value)
{
    imgProc(value/100.0);
}

blend.ui

相关推荐
王大王momo14 小时前
Kimi K3.1 Pro 正式发布:编程与 3D 能力升级,Highspeed 同步上线
人工智能·ai编程
zhippt_101414 小时前
AI生成PPT工具推荐:图转PPT与一键生成实测对比
人工智能·1024程序员节
zhippt_101414 小时前
AI生成PPT工具怎么选?6款在线一键生成PPT工具实测对比
人工智能·powerpoint
成都旺小宝科技14 小时前
AI工牌案例:华润静安府话术执行率提到62%
人工智能·机器学习·房地产
apollo_qwe14 小时前
大模型 API 接通了,AI 聊天页面为什么还是不好用?
前端·vue.js·人工智能
悟天特斯14 小时前
楼宇自控的进阶:从「自动控制」到「自学习优化」
人工智能·物联网
见闻小天地14 小时前
新手入门:印刷包装设备的伺服和PLC运动控制方案各管什么?七步选型讲清楚
运维·网络·数据库·人工智能
JuiceFS15 小时前
HeyGen:如何让全球 10+ GPU 集群训练不再等待数据?
人工智能·后端
鬼手点金15 小时前
KV Cache 未必是一次性的:可编辑、可组合的“笔记”
java·人工智能·笔记·学习·自动化·1024程序员节
天天代码码天天15 小时前
魔方转不回去了?我用 C# 做了个还原助手,跟着动画一步步来
人工智能