给你的头像+1 的opencv实现

1. 前言

题目是牛客网的, 链接如下:
https://www.nowcoder.com/discuss/19598?type=0&order=0&pos=4&page=1
觉得这个蛮有意思的, 于是顺手用opencv 实现了一下

2. 实现

2.1 效果

这里写图片描述

2.2 字符添加位置的说明

这里面感觉唯一的一个需要推敲的一个点, 应该就是实现字符的居中放置了, 牛客网上好多同学采用的是人机交互的方式, 手工放置这个数据, 感觉比较费劲。
我们这里通过 getTextSize 获取字符串文本的宽度和高度信息, 通过计算得到其在图像中的相应位置, 从而实现数字的居中放置。

3. 实现代码

#include <opencv.hpp>
#include <string>
#include <iostream>

using namespace cv;
using namespace std;

void drawTopNum(string tip, Scalar color, int len, Mat & picNum, double fontScale = 3, int thinkness = 10){
    Size size(len, len);
    circle(picNum, Point(picNum.cols - size.width / 2, size.height / 2), len / 2, color, CV_FILLED);    
    int fontface = CV_FONT_HERSHEY_SIMPLEX;
    Size textSize = getTextSize(tip, fontface, fontScale, thinkness, nullptr);
    putText(picNum, tip, Point(picNum.cols - size.width / 2 - textSize.width / 2, size.height / 2 + textSize.height / 2),
        fontface, fontScale, Scalar(255, 255, 255), thinkness);
}

int main(int argc, char ** argv){
    Mat src = imread("flower_Dance.jpg");
    if (src.empty()){
        cerr << "没有找到用户头像" << endl;
        exit(-1);
    }
    drawTopNum("1", Scalar(0, 0, 255), 100, src, 2, 5);

    imshow("res", src);
    waitKey();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值