PotatoPie 4.0 实验教程(33) —— FPGA实现摄像头视频图像叠加

链接直达

https://item.taobao.com/item.htm?ft=t&id=776516984361

什么是视频水印?

视频水印就是图像叠加,跟画中画,或者是OSD是一样的原理,都是在视频的行场数据流上进行替换操作,比如叠加可以直接用水印图的数据替掉摄像头的数据,也可以将水印图的数据与摄像头的数据进行运算后再替换原有的摄像头数据。

图片转MIF

首先我们需要一个水印图片,这个水印图片如何让FPGA可以读取呢?不带SOC的FPGA不太适合直接解析jpg,png图片,因此我们可以先在PC上将图片处理成.mif格式,.mif是安路支持的FPGA ROM的初始化格式。

我们提供python和安路版本的图片转MIF的转换代码。

python实现图片转MIF源码

从图片生成叠加MIF的python代码,支持所有常见图片格式(bmp,png, jpeg):

PotatoPie 4.0 实验教程(32) —— FPGA实现摄像头视频图像叠加-Anlogic-安路论坛-FPGA CPLD-ChipDebug

这段代码实现了将图片转换为Memory Initialization File(MIF)格式的功能。具体来说,它会从指定的图片文件中读取像素数据,并将其转换为适合存储在存储器中的格式。代码首先获取当前.py文件所在的目录,然后构建图片文件的路径,从而读取名为icmaker.png的图片文件。接着,它会打开这个图片文件,并获取其大小。然后,代码会清空之前同名的MIF文件(如果存在),并打开一个用于写入的MIF文件。在MIF文件中,代码会按照指定的格式写入图片的像素数据,其中包括像素的地址和对应的RGB值。最终,生成的MIF文件可以用于初始化存储器,用于在数字电路中存储图片数据。

MATLAB实现图片转MIF源码

PotatoPie 4.0 实验教程(32) —— FPGA实现摄像头视频图像叠加-Anlogic-安路论坛-FPGA CPLD-ChipDebug

FPGA工程分析

工程层次图

demo18相比,只是多了一个watermark的模块,也就是下面这一段代码,在从SDRAM读出来之后,经它处理后再输出hdmi_tx模块。

watermark代码分析

模块代码比较简单,watermark.v中我们先例化一个存储水印图片的ROM

img_36_128_rom u_img_36_128_rom( .doa  ({r_d0,g_d0,b_d0}), .addra  (rd_addr     ), .clka  (i_clk       ), .rsta  (1'b0       ) 
);

ROM的定义文件img_36_128_rom中指定了mif文件的路径。

.INIT_FILE("./icmaker_36_128_3.mif"),

然后控制RGB数据的输出,选择是摄像头数据还是水印数据,o_de1为有效的时候输出水印数据

assign o_r = o_de1 ? r_d0 : r_d1;

assign o_g = o_de1 ? g_d0 : g_d1;

assign o_b = o_de1 ? b_d0 : b_d1;

那么如何控制水印数据呢?下面的代码即为控制代码,上面的o_de1就是下面代码中的de_d0延时后的信号。

上面的BEGIN_XH_ACTIVE这些参数在文件的头部有定义,详见代码如下片段。

parameter  H_ACTIVE_IMG   = 1280; //图像宽度                              
parameter  V_ACTIVE_IMG   = 720;  //图像高度
parameter  H_ACTIVE     = 128;  //水印区域宽度                              
parameter  V_ACTIVE     = 36;   //水印区域高度
parameter  BEGIN_X          = 511;  //水印起始坐标
parameter  BEGIN_Y          = 360;  //水印起始坐标

管脚约束

与PotatoPie 4.0 实验教程(18) —— FPGA实现OV5640摄像头采集以SDRAM作为显存进行HDMI输出显示相同,不作赘述。

时序约束

与PotatoPie 4.0 实验教程(18) —— FPGA实现OV5640摄像头采集以SDRAM作为显存进行HDMI输出显示相同,不作赘述。

实验结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arthas无法捕获到try catch了的异常怎么办呢?

本案例使用的arthas是最新版本3.7.2 要跟踪的代码: 1、arthas watch试下能不能捕获到 页面上请求 http://localhost:8080/exception发现捕获不了。 2、可以使用btrace捕获,能够捕获到 我本案例使用Eclipse编写btrace脚本 ,首先引入btrace的jar包 <dependency> <g…

Java、Go 和 Rust 的比较

当涉及到Java、Go和Rust的比较时&#xff0c;主要考虑的是它们在性能、安全性、开发效率等方面的差异。下面将为你提供一个简单的例子&#xff0c;比较它们在并发编程方面的不同。 Java Java是一种面向对象的编程语言&#xff0c;广泛用于企业级应用和大型系统开发。它具有强…

scala基础学习--变量,标识符,类型和类型转换

一、基本学习 1、输出语句和分号 1.换行输出 println&#xff08;打印数据&#xff09;2.不换行输出 print(打印数据)3.分号使用 在多个打印在一行中间的分号必须写&#xff0c;末尾可以不写 2、Scala中常量 常量是指&#xff1a;在程序发生变化过程中&#xff0c;不会发…

跨语言摘要CLS近期论文研究总结(一)

1. A Cross-Lingual Summarization method based on cross-lingual Fact-relationship Graph Generation 基于跨语言事实关系图生成的跨语言摘要方法学习 首先&#xff0c;从源语言文档和目标语言参考摘要中提取事实三重信息&#xff0c;并构建其事实关系图。 然后&#xff0c…

汽车制造业安全事故频发,如何才能安全进行设计图纸文件外发?

汽车制造业产业链长&#xff0c;关联度高&#xff0c;汽车制造上游行业主要为钢铁、化工等行业&#xff0c;下游主要为个人消 费、基建、客运和军事等。在汽车制造的整个生命周期中&#xff0c;企业与上下游供应商、合作商之间有频繁、密切的数据交换&#xff0c;企业需要将设计…

开发总结-Controller层

Controller层一定要try catch一下&#xff0c;不然里面报的错可能导致程序报错。 catch中就表示有错误就 Return ResultUtils.err(e.getMessage()) 必填项校验 在实体属性中添加注解 NotNull : 用在基本类 型上 不能为null 但可以为空字符串 NotEmpty : 用在集合类上 不能为…

PHP SMTP 电子邮件错误‘354结束数据‘data: 354 Enter mail, end with .

荆轲刺秦王 公司的邮箱发送验证码功能 之前一直正常工作 但是最近停止了 查看代码发现邮件类使用的是codeigniter框架的Email class 原有的代码是&#xff1a; /application/config.php mail >[protocol > smtp,smtp_host > mail.baidu.com,smtp_user > roo…

oracle pl/sql 如何让sql windows 显示行号

oracle pl/sql 如何让sql windows 显示行号 下载最新版的pl/sql第一步&#xff0c;在preferences中对sql Windows进行设置&#xff0c;如下所示第二步&#xff0c;在preferences中对User interface进行设置&#xff0c;如下所示结果如下当然&#xff0c;还可以通过右键选择是否…

ccpc热身赛题目1:中文系Roliy的困惑

代码 import java.util.ArrayList; import java.util.Scanner;public class Main {public static void main(String[] args) {ArrayList<String> list new ArrayList<>();char [] charArr new char[32];for (int i 0; i < charArr.length; i) {charArr[i] 0…

OPPO Reno10Pro/Reno11/K10手机强解BL刷root权限KSU内核抓包刷机救砖

OPPO Reno10Pro/Reno11/K10手机虽然发布时间并不久&#xff0c;但由于天玑处理器的体质&#xff0c;已经支持强制解锁BL了&#xff0c;该漏洞来自第三方工具适配&#xff0c;支持OPPO天机8100/8200刷机救砖解锁BL不需要等待官方深度测试直接实现。解锁BL后的OPPO Reno10Pro/Ren…

PC-3000 Mobile Pro: 智能手机及平板设备数据提取及取证工具

天津鸿萌科贸发展有限公司从事数据安全业务20余年&#xff0c;在数据恢复、数据取证、数据备份等领域有丰富的案例经验、前沿专业技术及良好的行业口碑。同时&#xff0c;公司面向取证机构及数据恢复公司&#xff0c;提供数据恢复实验室建设方案&#xff0c;包含数据恢复硬件设…

深度学习之基于Tensorflow卷积神经网络公共区域行人人流密度可视化系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在公共区域&#xff0c;如商场、火车站、地铁站等&#xff0c;人流密度的监控和管理对于确保公共安全…

Android OpenMAX(一)漫谈

在开始正式的学习前,我们先来聊一聊Android音视频开发中的一些问题、感受与想法。(有一点要事先说明,我的问题与答案、想法并不一定正确,请读者带着审慎的思考来阅读,后续的文章也是一样,希望读者边阅读边思考,看到错误可以指出让我改正,如有问题也可以提出一起讨论。)…

制作一个RISC-V的操作系统十五-软件定时器

文章目录 定时器分类定时器相关分类软件定时器设计初始化创建删除触发流程图形示意 优化代码 定时器分类 硬件定时器&#xff1a;由硬件频率和触发限制的大小决定&#xff0c;只有一个&#xff0c;精度高 软件定时器&#xff1a;基于硬件定时器实现&#xff0c;精度大于等于硬…

YOLOV8模型更改

速递 | YOLOv8模型改进的N种方法-CSDN博客 【10】yolov8目标检测模型改进之添加注意力机制_yolov8中添加无参数注意力-CSDN博客 YOLO系列助力涨点&#xff01;新SOTA让缺陷检测更准更快&#xff01;(附开源数据集下载) - 哔哩哔哩 (bilibili.com)

Docker在linux安装步骤超详细

官网 Install Docker Engine on CentOS | Docker Docs yum -y install gcc yum -y install gcc-c 安装工具 sudo yum install -y yum-utils 设置国内的镜像 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yu…

Scala 多版本下载指南

Scala&#xff0c;这一功能丰富的编程语言&#xff0c;结合了面向对象和函数式编程的精华&#xff0c;为开发者提供了强大的工具来构建高效、可扩展的应用程序。随着Scala社区的不断壮大和技术的演进&#xff0c;多个版本的Scala被广泛应用于不同的项目与场景中。本文旨在为您提…

acwing算法提高之数据结构--线段树

目录 1 介绍2 训练3 参考 1 介绍 线段树是算法竞赛中常用的用来维护区间信息的数据结构。 线段树可以在O(logN)时间复杂度内完成以下操作&#xff1a; 单点修改。区间修改&#xff08;需要加入懒标记&#xff09;。区间查询&#xff08;区间求和、求区间最大值、求区间最小值…

更新-上市公司董事会多样性指标计算参考SMJ2021(代码+数据)1990-2022年

01、数据介绍 董事会多样性&#xff08;Board Diversity&#xff09;是指公司董事会成员在性别、年龄、种族、教育背景、专业技能、国籍等方面的多元化程度。多样性的董事会能够为公司带来更广泛的观点、经验和技能&#xff0c;有助于提高公司的战略决策质量和创新能力。同时&…

ping命令操作记录

1&#xff0c;ping 主机可查看主机是否在线 2&#xff0c;ping -a参数&#xff0c;解析主机的名称 3&#xff0c;ping -r 跟踪打印路由信息 ping命令的作用&#xff1a;确认目标主机是否存活&#xff0c;确定网络是否畅通 ping的原理&#xff1a;ping发送ICMP&#xff08;互联…