使用 OpenCV 实现国庆渐变版的头像

简介: 使用 OpenCV 实现国庆渐变版的头像

国庆期间发现很多小伙伴的头像都换了,添加了国旗的效果,变得更加喜庆。


该效果看上去不难,用 OpenCV 几十行就可以实现了。


最简单的图像融合版本



先来一个最简单的图像融合版本,找一张头像以及一张标准国旗的图片,将找到的头像做裁剪,大小跟国旗的大小保持一致。


image.png

icon.jpg


然后,两张图片进行叠加

cv::Mat image = cv::imread("/Users/tony/Downloads/icon.jpg");
    cv::Mat flag = cv::imread("/Users/tony/Downloads/flag.png");
    cv::Mat roi,dst;
    cv::imshow("image",image);
    cv::imshow("flag",flag);
    roi = image(cv::Rect(300,400, flag.cols, flag.rows));
    cv::addWeighted(roi, 0.8, flag, 0.35, 0, dst);
    cv::imshow("dst",dst);


网络异常,图片无法展示
|

roi.png


渐变版本



刚才的效果一般,那我们再尝试一下渐变的版本。离红旗越近,红旗的权重越大。这样就可以实现渐变的效果。

cv::Mat image = cv::imread("/Users/tony/Downloads/icon.jpg");
    cv::Mat flag = cv::imread("/Users/tony/Downloads/flag.png");
    int flag_width = flag.cols;
    int flag_height = flag.rows;
    Mat roi = image(cv::Rect(450,1200, flag_width, flag_height));
    int radius = 0;
    if (flag_width > flag_height) {
        radius = flag_width;
    } else {
        radius = flag_height;
    }
    for (int i=0; i<roi.rows; i++) {
        for (int j=0;j<roi.cols;j++) {
            int distance = std::sqrt(i*i+j*j);
            double alpha;
            if (distance > radius) {
                alpha =  1;
            }  else {
                alpha = (double) distance / radius;
            }
            Vec3b v1 = roi.at<Vec3b>(i,j);
            roi.at<Vec3b>(i,j)[0]=alpha*v1[0] + (1-alpha)*flag.at<Vec3b>(i,j)[0];
            roi.at<Vec3b>(i,j)[1]=alpha*v1[1] + (1-alpha)*flag.at<Vec3b>(i,j)[1];
            roi.at<Vec3b>(i,j)[2]=alpha*v1[2] + (1-alpha)*flag.at<Vec3b>(i,j)[2];
        }
    }
    cv::imshow("dst",roi);


网络异常,图片无法展示
|

result.png


这次的效果,比第一次好多了:)。

btw,祝大家国庆节快乐!

相关文章
|
5月前
|
监控 安全 数据可视化
“乐高式”大屏应用构建!业务全景一键聚合
还在为多业务数据分散烦恼?DataV 7.0 全新推出「大屏嵌入」功能,无需重复开发!像搭乐高一样,将销售看板、物流监控、用户画像等子屏自由嵌入主屏,构建跨部门、跨业务的全景智能作战系统!老板要的“一张图”数据,分分钟搞定!
196 0
|
3月前
|
机器学习/深度学习 自然语言处理 搜索推荐
别再靠“人海战术”了:数据如何帮社交媒体搞定内容审核?
别再靠“人海战术”了:数据如何帮社交媒体搞定内容审核?
209 13
|
机器学习/深度学习 数据可视化 大数据
驾驭股市大数据:Python实战指南
【10月更文挑战第1天】随着信息技术的发展,投资者现在能够访问到前所未有的海量金融数据。本文将指导您如何利用Python来抓取当前股市行情的大数据,并通过分析这些数据为自己提供决策支持。我们将介绍从数据获取到处理、分析以及可视化整个流程的技术方法。
742 2
|
8月前
|
存储 安全 Linux
|
8月前
|
机器学习/深度学习 人工智能 运维
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
316 8
|
9月前
|
数据采集 安全 数据挖掘
淘宝天猫宝贝详情页面商品评论采集接口全解析
淘宝天猫商品评论采集接口为电商数据挖掘提供了重要工具。通过分析海量评论,消费者可获取购买决策参考,商家能优化产品与服务,市场研究者则能洞察行业趋势与竞品表现。该接口支持Python请求,助力开发者构建智能分析应用,推动电商生态中各方价值提升。使用时需遵守平台规则,确保数据安全与合法利用。
293 15
|
存储 SQL 分布式计算
Hadoop生态系统概述:构建大数据处理与分析的基石
【8月更文挑战第25天】Hadoop生态系统为大数据处理和分析提供了强大的基础设施和工具集。通过不断扩展和优化其组件和功能,Hadoop将继续在大数据时代发挥重要作用。
|
10月前
|
机器学习/深度学习 编解码 异构计算
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 ICCV 2023的EfficientViT 用于高分辨率密集预测的多尺度线性关注
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 ICCV 2023的EfficientViT 用于高分辨率密集预测的多尺度线性关注
688 11
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 ICCV 2023的EfficientViT 用于高分辨率密集预测的多尺度线性关注
|
10月前
|
人工智能 算法 数据挖掘
AAAI 2025| S5VH: 基于选择性状态空间的高效自监督视频哈希
随着短视频、流媒体平台的爆发式增长,如何高效地索引和检索视频数据成为计算机视觉和多媒体领域的重要研究问题。视频哈希(Video Hashing) 是一种通过学习紧凑的二进制编码来高效索引和检索视频的技术,其核心目标是使哈希码的汉明距离(Hamming Distance)能够准确地反映视频之间的语义相似性。
204 18
|
10月前
|
人工智能 Java 程序员
一文彻底搞定电阻元件
电阻元件是限流器件,通过其电流与两端电压成正比(V=IR),阻值受温度、材料等影响。按特性分为线性与非线性,材料上有碳膜、金属膜等,用途涵盖限流、分压、偏置、滤波等。标称阻值有允许偏差,额定功率和最高工作电压需注意。色标法和直接读取法可用于识别阻值,万用表测量时需关闭电源并选择合适量程。电阻在电路设计中不可或缺,掌握其特性和应用对电子工程师至关重要。
736 0
一文彻底搞定电阻元件