福州大学《嵌入式系统综合设计》实验六:图像加权融合

 一、实验目的

掌握bmcv_image_add_weighted的使用

二、实验内容

搭建BMCV环境并成功运行加权融合例程

三、开发环境

开发主机:Ubuntu 22.04 LTS

硬件:算能SE5

本地如果有SE5硬件,则可以PC机作为客户端,SE5作为服务器端。本地如果没有SE5硬件,只有云空间,则可以直接将客户端和服务器端都通过云空间实现,机在云空间的SE5模拟环境中实现。

四、实验器材

开发主机 + 云平台

五、实验过程与结论

本实验涉及的程序框架与实验4的图4-1一致,仅需根据具体调用的API函数配置相关参数即可,因此接下来重点介绍bmcv_image_add_weightedAPI函数的参数及其调用方法。

在图像处理中,需要对多张图像进行加权融合,以得到新的图像。如场景拼接中,拼接部分可以通过对左右两张图片进行加权融合,实现更为自然的过渡;或者需要兼顾两张图像的信息时,也可以进行加权融合。这可以通过bmcv提供的bmcv_image_add_weighted函数实现。

5.1 bmcv_image_add_weighted函数 
bm_status_t bmcv_image_add_weighted(
    bm_handle_t handle,
    bmcv_image input1,
    float alpha,
    bm_image input2,
    float beta,
    float gamma,
    bm_image output)

其中,handle为bm_handle 句柄; input1,input2 为待融合的两个bm_image 对象,必须具有相同的宽、高; output为融合后输出的图像。 alpha、beta、gamma则是融合的参数,即将图片数据按照下式进行融合,其中,要求alpha+beta=1。

out = input1*alpha+input2*beta+gamma

代码调用方式参考如下:

bmcv_image_add_weighted(handle,input1,0.5,input2,0.5,0,output) 

5.2 OpenCV下图像加权融合方法

在OpenCV下可以通过addweight函数来实现。其参数设置与BMCV的bmcv_image_add_weighted一致,参考代码如下:

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;

int main( void )
{
    double alpha = 0.5; double beta; double input;
    Mat src1, src2, dst;
    cout << " Simple Linear Blender " << endl;
    cout << "-----------------------" << endl;
    cout << "* Enter alpha [0-1]: ";
    cin >> input;

    // We use the alpha provided by the user if it is between 0 and 1
    If (input >= 0 && input <= 1) { 
        alpha = input; 
    }
    
    src1 = imread( "../data/LinuxLogo.jpg" );
    src2 = imread( "../data/WindowsLogo.jpg" );
    
    If ( src1.empty() ) {
        cout << "Error loading src1" << endl; 
        return -1; 
    }
    
    If ( src2.empty() ) { 
        cout << "Error loading src2" << endl; 
        return -1; 
    }
    
    beta = ( 1.0 - alpha );
    addWeighted( src1, alpha, src2, beta, 0.0, dst);
    imshow( "Linear Blend", dst );
    waitKey(0);
    return 0;
}
5.3 执行结果
按照上述步骤,生成可执行文件并上传到算能盒子,执行:

此时bmcv_weight文件夹内的文件如图所示

root@b3e319d8aoc8:~/bmnnsdk2-bm1684_v2.7.0/examples/bmcv_weight ls

Makefile Readme.md bmcv_weight bmcv_weight.cpp bmcv_weight.o _common.h  cutecat.jpeg cutedog.jpeg

要融合的两张图片如图所示:

给可执行文件赋权限并执行

root@b3e319d8aBc8:~/bmnnsdk2-bm1684_v2.7.0/examples/bmcv_sobel# chmod 777 bmcv_sobel
root@b3e319d8aBc8:~/bmnnsdk2-bm1684_v2.7.0/examples/bmcv_sobel# ./bmcv_sobel greycat.jpeg

Open /dev/ipu successfully,device index = 0,ipu fd =8, vpp fd = 9

执行结果如下所示(生成out.jpg)

[ bmlib_memory][error] free gmem failed!
root@b3e319d8a0c8:~/bmnnsdk2-bm1684_v2.7.0/examples/bmcv_weight# ls
MakefileReadme.md bmcv_weight bmcv_ weight.cpp bmcv_weight.o _common.h cutecat.jpeg cutedog.jpeg out.jpg

生成的结果out.jpg如图所示 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/187902.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RK3588硬编解码MPP环境配置

1. 简介 瑞芯微提供的媒体处理软件平台&#xff08;Media Process Platform&#xff0c;简称 MPP&#xff09;是适用于瑞芯微芯片系列的 通用媒体处理软件平台。该平台对应用软件屏蔽了芯片相关的复杂底层处理&#xff0c;其目的是为了屏蔽不 同芯片的差异&#xff0c;为使用者…

2016年11月10日 Go生态洞察:七年的Go语言旅程

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【教学类-06-09】20231125 (55格版)X-Y之间“加法减法+-题” (以10-20之间为例)(加法的正序+逆序,减法的正序,题目多)

图片展示 需求&#xff1a; 20以内加法减法&#xff0c;不需要再练习其中10以内部分&#xff0c;改为10-20以内的加法减法&#xff0c;X-Y大于10&#xff0c;小于20的所有加法减法题。 代码展示&#xff1a; X-Y 之间的所有加减混合法题&#xff08;如10-20之间的所有加法减法…

FireAlpacaforMac/win中文版—专业绘图软件释放你的创造力!

FireAlpaca是一款专业绘图软件&#xff0c;适用于Mac和Windows操作系统。无论你是初学者还是专业绘画师&#xff0c;FireAlpaca都能为你提供一个简单、强大的绘画平台&#xff0c;释放你的创造力。 首先&#xff0c;FireAlpaca拥有丰富的绘画工具和功能。它提供了各种绘画笔刷…

TCP/IP、Http、Socket之间的区别

目录 前言 一、TCP/IP协议 二、HTTP协议 三、Socket通信机制 四、TCP/IP、HTTP和Socket之间的区别 总结 前言 TCP/IP、HTTP和Socket是计算机网络中的三个重要概念&#xff0c;它们之间有着密切的联系和区别。 一、TCP/IP协议 TCP/IP是指传输控制协议/因特网协议&#x…

手摸手Element-ui组件化开发

前端环境准备 编码工具: VSCode 依赖管理:NPM 项目构建: Vuecli NPM的全称是Node Package Manager&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块&#xff08;包&#xff09;的标准。2020年3月17日&#xff0c;Github宣布收购npm&am…

数据结构与算法(三)贪心算法(Java)

目录 一、简介1.1 定义1.2 基本步骤1.3 优缺点 二、经典示例2.1 选择排序2.2 背包问题 三、经典反例&#xff1a;找零钱3.1 题目3.2 解答3.3 记忆化搜索实现3.4 动态规划实现 一、简介 1.1 定义 贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff0c;又名贪婪法&…

CSS新特性(2-2)

CSS新特性&#xff08;2-2&#xff09; 前言box相关box-shadow background背景rgba颜色与透明度transform:rotate(Xdeg) 2D旋转transform:tranlate 平移 前言 本文继续讲解CSS3其他的新特性&#xff0c;想看之前新特性点击这里&#xff0c;那么好本文正式开始。 box相关 box…

[element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案

问题描述 在没有进行任何操作的时候&#xff0c;使用 this.$refs.xxxx 无法获取el-dialog中的内部元素&#xff0c;这个问题会导致很多bug. 官方解释&#xff0c;在open事件回调中进行&#xff0c;但是open()是弹窗打开时候的会调&#xff0c;有可能在此处获取的时候&#xff…

[多线程】线程安全问题

目录 1.举个栗子 2.线程安全的概念 3.线程不安全的原因 3.1原子性 3.2Java内存模型&#xff08;jvm&#xff09; 3.3代码重排序 4.解决线程的不安全问题-&#xff08;synchronized&#xff09; ​编辑 4.1sychronized的特性 4.2刷新内存 4.3可重入 5.synchornized使…

「Verilog学习笔记」数据累加输出

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 在data_out准备好&#xff0c;valid_b拉高时&#xff0c;如果下游的ready_b为低&#xff0c;表示下游此时不能接收本模块的数据&#xff0c;那么&#xff0c;将会拉低ready…

JMeter 测试脚本编写技巧

JMeter 是一款开源软件&#xff0c;用于进行负载测试、性能测试及功能测试。测试人员可以使用 JMeter 编写测试脚本&#xff0c;模拟多种不同的负载情况&#xff0c;从而评估系统的性能和稳定性。以下是编写 JMeter 测试脚本的步骤。 第 1 步&#xff1a;创建测试计划 在JMet…

【Python百宝箱】Python轻松操控邮件:SMTP、POP3和IMAP的魅力

前言 在数字时代&#xff0c;电子邮件作为信息传递的主要手段&#xff0c;对个人和企业的日常工作至关重要。Python提供了多个强大的库&#xff0c;使得电子邮件的发送和接收变得轻松而灵活。本文将深入介绍Python中与电子邮件相关的主要库&#xff0c;为读者提供从基础到高级…

每日一题--删除链表的倒数第 N 个结点

破阵子-晏殊 燕子欲归时节&#xff0c;高楼昨夜西风。 求得人间成小会&#xff0c;试把金尊傍菊丛。歌长粉面红。 斜日更穿帘幕&#xff0c;微凉渐入梧桐。 多少襟情言不尽&#xff0c;写向蛮笺曲调中。此情千万重。 目录 题目描述&#xff1a; 思路分析&#xff1a; 方法及…

全面(16万字)深入探索深度学习:基础原理到经典模型网络的全面解析

前言 Stacking(堆叠) 网页调试 学习率&#xff1a;它决定了模型在每一次迭代中更新参数的幅度激活函数-更加详细 激活函数的意义: 激活函数主要是让模型具有非线性数据拟合的能力&#xff0c;也就是能够对非线性数据进行分割/建模 如果没有激活函数&#xff1a; 第一个隐层: l…

关于python中的nonlocal关键字

如果在函数的子函数中需要调用外部变量&#xff0c;一般会看见一个nonlocal声明&#xff0c;类似下面这种&#xff1a; def outer_function():x 10def inner_function():nonlocal xx 1print(x)inner_function()outer_function()在这个例子中&#xff0c;inner_function 引用…

[HCIE] IPSec-VPN (IKE自动模式)

概念&#xff1a; IKE&#xff1a;因特网密钥交换 实验目标&#xff1a;pc1与pc2互通 步骤1&#xff1a;R1与R3配置默认路由 R1&#xff1a; ip route-static 0.0.0.0 0.0.0.0 12.1.1.2 R2&#xff1a; ip route-static 0.0.0.0 0.0.0.0 23.1.1.2 步骤2&#xff1a;配ACL…

Java数组的复制、截取(内含例题:力扣-189.轮转数组)

目录 数组的复制、截取&#xff1a; 1、使用Arrays中的copyOf方法完成数组的拷贝 2、使用Arrays中的copyofRange方法完成数组的拷贝 题目链接&#xff1a; 数组的复制、截取&#xff1a; 1、使用Arrays中的copyOf方法完成数组的拷贝 public class Csdn {public static vo…

vscode的下载安装与配置【超详细】

1、下载 进入vscode官网 打开浏览器的下载内容管理&#xff0c;找到vscode下载任务&#xff0c;鼠标放在下载链接上并右击&#xff0c;点击复制链接地址 下载太慢&#xff1f;使用国内镜像 打开新窗口粘贴地址&#xff0c;并将域名改为&#xff1a;vscode.cdn.azure.cn&am…

ZKP11.4 Use CI to instantiate Fiat-Shamir

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 11: From Practice to Theory (Guest Lecturer: Alex Lombardi) 11.4 Use CI to instantiate Fiat-Shamir Avoid Bad Challenges Def: Given false claim x x x and a first message α \alpha α, a challenge β \beta …