验证码生成

        Completely Automated Public Turing test to tell Computers and Humans Apart

        看到这一长串英文,会不会很懵,它的意思是全自动区分计算机和人类的图灵测试。就是我们熟知的验证码。在日常的学习生活中,或多或少的接触过这样那样的验证码图片。

今天,让我们一起来探讨一下如何用OPENCV生成这些验证码图片。

观察一个验证码图片,它由三个部分组成: 背景色块,随机字符,干扰线条。

1、增加背景色块

       int imageWidth = 300;

       int imageHeight = 60;

       srand((unsigned)time(NULL));

       double bgColor = rand() % 100 + 100;

       Mat image(imageHeight,imageWidth,CV_8UC3, Scalar(bgColor, bgColor,  bgColor));

       imshow("image1", image);

       for (int i = 0; i < image.rows; i++) { //多色显示

              for (int j = 0; j < image.cols; j++)

              {

                     image.at<Vec3b>(i, j)[0] = rand() % 100 + 100;

                     image.at<Vec3b>(i, j)[1] = rand() % 100 + 100;

                     image.at<Vec3b>(i, j)[2] = rand() % 100 + 100;

              }

       }

2、获得随机字符
 

string getLetterCode() {

       string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

       vector <bool>flag = {0};

       flag.resize(36);

       vector<char> result;

       result.resize(6);

       srand((unsigned)time(NULL));

       for (int i = 0; i < result.size(); i++) {

              int j = rand() % 36;;

              while (flag[j])  j = rand()%36;

              result[i] = chars[j];

              flag[j] = true;

       }

       string string = "";

       for (int i = 0; i < result.size(); i++) {

              string += result[i];

       }

       return string;

}

3、给字符增加随机颜色,随

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值