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

相关文章
|
2月前
|
机器学习/深度学习 编解码 人工智能
ColorFlow:腾讯和清华大学联合推出的图像序列着色模型,通过参考图像的颜色对黑白漫画进行着色生成彩色漫画
ColorFlow是由清华大学和腾讯ARC实验室共同推出的图像序列着色模型,通过检索增强、上下文学习和超分辨率技术,确保黑白图像序列的着色与参考图像颜色一致,适用于漫画、动画制作等工业应用。
459 15
ColorFlow:腾讯和清华大学联合推出的图像序列着色模型,通过参考图像的颜色对黑白漫画进行着色生成彩色漫画
Photoshop制作漂亮白色荧光文字图片
Photoshop制作漂亮白色荧光文字图片
87 0
|
9月前
|
人工智能 监控 API
OpenCV这么简单为啥不学——1.11、蓝背景证件照替换白色或红色
OpenCV这么简单为啥不学——1.11、蓝背景证件照替换白色或红色
103 0
OpenCV-怀旧色滤镜
OpenCV-怀旧色滤镜
109 1
|
前端开发 数据可视化 定位技术
百度地图开发:根据指定手绘图纸照片行政区划自定义绘制对应区域边界生成geoJOSN的解决方案
百度地图开发:根据指定手绘图纸照片行政区划自定义绘制对应区域边界生成geoJOSN的解决方案
465 0
百度地图开发:根据指定手绘图纸照片行政区划自定义绘制对应区域边界生成geoJOSN的解决方案
EasyX颜色+绘制彩虹色天空
今天夜里想搞一搞easyx(doge)
170 0
|
缓存 Java
全网首发:JDK绘制文字:七、使用字体图像进行绘制
全网首发:JDK绘制文字:七、使用字体图像进行绘制
128 0
|
机器学习/深度学习 人工智能 开发者
尼日利亚学生使用 PAI 打造卡通头像神器|学习笔记
快速学习尼日利亚学生使用 PAI 打造卡通头像神器。
|
Java 计算机视觉 Python
opencv换照片底色
opencv换照片底色
238 0
|
前端开发
不会photoshop? 也能用canvas把头像设计成彩虹色🌈
不会photoshop? 也能用canvas把头像设计成彩虹色🌈
199 0