使用 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,祝大家国庆节快乐!

相关文章
|
1月前
卡通纸箱空空如也404源码
卡通纸箱空空如也404源码,喜欢的小伙伴可以下方预览看看,满意之后下载放到任何目录都可以使用!
16 0
卡通纸箱空空如也404源码
|
7月前
|
C++ 计算机视觉
OpenCV-美食—鲜美滤镜
OpenCV-美食—鲜美滤镜
|
7月前
|
C++
OpenCV-怀旧色滤镜
OpenCV-怀旧色滤镜
|
7月前
|
C++ 计算机视觉
OpenCV-美食—巧克力滤镜
OpenCV-美食—巧克力滤镜
|
12月前
|
前端开发 JavaScript
2023年新年烟花代码(背景音乐完整版)
2023年新年烟花代码(背景音乐完整版)
167 0
|
12月前
EasyX颜色+绘制彩虹色天空
今天夜里想搞一搞easyx(doge)
101 0
|
机器学习/深度学习 人工智能 开发者
尼日利亚学生使用 PAI 打造卡通头像神器|学习笔记
快速学习尼日利亚学生使用 PAI 打造卡通头像神器。
64 0
|
Java 计算机视觉 Python
opencv换照片底色
opencv换照片底色
174 0
|
前端开发
不会photoshop? 也能用canvas把头像设计成彩虹色🌈
不会photoshop? 也能用canvas把头像设计成彩虹色🌈
143 0
|
机器学习/深度学习 文字识别 小程序
PyHubWeekly | 第十五期:你的专属卡通头像
本期为大家推荐GitHub上5个优质的Python项目,它们分别是: •photo2cartoon •jumpcutter •mkdocs •chineseocr •streamlit
PyHubWeekly | 第十五期:你的专属卡通头像