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

相关推荐
倔强的石头1065 小时前
DeepSeek系列_国产大模型的技术创新解析
人工智能·大模型
企业数字化笔记5 小时前
AI工具的文件和参数怎么设计?上传校验、配置版本与可复现任务
前端·人工智能
seconp5 小时前
AI 时代怎么做计算机毕业设计?
人工智能·毕业设计·软件工程·课程设计·毕设
loulanyue_5 小时前
智能成为“商品”之后:读吴泳铭 2026 云栖演讲的六个取舍
人工智能
鬼手点金6 小时前
opencode-性能优化建议
java·人工智能·git·自动化·nanogpt
在所不辞兄6 小时前
分层PINN提升多物理场耦合效率
人工智能·深度学习·神经网络·机器学习·工程仿真
AI技术新视界6 小时前
微软确认 GPT‑6 使用 Looped Transformers
人工智能·llm
智圣新创016 小时前
智圣新创智慧学生社区线上服务平台 高校一站式育人场景数字化升级全域建设指南
大数据·人工智能
朝朝辞暮i6 小时前
VLA 系统学习第 5 课:神经网络的参数到底是什么?——从 nn.Linear 真正理解 W、 b 和 Gradient
人工智能·python·深度学习·神经网络·vla