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

相关推荐
冬奇Lab1 小时前
开源项目第180期:Omnigent — Databricks 出品的 AI Agent 元编排层,让 Claude Code、Codex、Cursor 统一管控
人工智能·开源·agent
kattgatt1 小时前
卡特加特玄武大模型合规备案,商用更安心
人工智能·卡特加特
qq_348231852 小时前
如何使用 Codex
人工智能
IT_陈寒2 小时前
Java并行流把我坑惨了:原来不是线程安全的!
前端·人工智能·后端
石逸凡2 小时前
AI驱动的金融IT架构转型升级
人工智能·金融·架构
染指11102 小时前
76.高级RAG-后检索器(时间排序)
人工智能·python·llama_index·llamaindex
小雷信息医学2 小时前
5 篇老年队列套路拆解第 3 篇:单库 + U 型新指标 + Cox + RCS 拐点
人工智能·机器学习
少冰2 小时前
从数据清洗到 Docker 部署:我在本地训练了一个中医领域 Qwen3 模型
人工智能
opensnn2 小时前
当闭源AI遇上开源反击:未来竞争的核心不是模型,而是生态
人工智能·开源