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

相关推荐
云上工程笔记几秒前
零基础 Vibe Coding 实战:用 p5.js 把一句古诗做成可交互的离线小工具
人工智能
wshzd2 分钟前
LLM之Agent(八十二)|PI(二十一)Skills 与 Prompt Templates
人工智能
硅谷秋水3 分钟前
GE-Act 2.0:面向机器人操作的“世界-动作”模型预训练与扩展
机器学习·计算机视觉·语言模型·机器人
tokenKe4 分钟前
Github 开源热榜 【2026-0917】
人工智能·chrome·github
动恰客流统计5 分钟前
用客流数据优化门店排班:高峰不缺人、平峰不浪费的落地路径
大数据·前端·人工智能
Thomas.Sir9 分钟前
第7课:PyTorch|激活函数全品类详解与选型实战【神经网络的“火花塞”】
人工智能·pytorch·神经网络
Seoyoneh12 分钟前
呼叫中心智能路由架构实战:规则引擎与多维度调度技术解析2026年
人工智能·信息与通信·通信
71777712 分钟前
金融行业研发平台推荐:Gitee 与主流方案对比及选型指南
人工智能·gitee
fxss15 分钟前
儿童免费学习网站大更新
人工智能
小静AI工程实验室15 分钟前
Claude Code 实用教程:Windows、macOS、Linux 从安装到项目调试与验收
人工智能·python·开发工具·claude code