どのようにpython-opencvを使ってロットでノイズを発生させるデジタル認証コードですか?


csdnを初めて使って文章を書きます。もし何か間違ったところがあれば、下記のコメントを歓迎します。ありがとうございます。
1.明確に使うカバン
まずopencvの関数ライブラリです。pythonが持っているランドムとPIL(Image、ImageDraw、ImageFont)もあります。一般的なpthone 3以上のバージョンは内蔵されています。もしインストールされていないならばpip installの方法で具体的な操作をインストールしてください。
在这里插入图片描述
リターンキーを入力したらすぐにインストールできます。もうインストールしたので、リターンキーを入力しません。インストールが終わったら、importの方式でインストールが成功したかどうかを確認できます。pythonを先に入力してpythonに入るプログラム環境を覚えてください。import PILを入力するとエラーが発生します。
在这里插入图片描述
2.ライブラリの導入
コードは以下の通りです。

import cv2 as cv
import random
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
3.ランダムな色の組み合わせを生成するget_ランドムカラー
カラー画像はRGB 3色チャンネルで構成されていますが、オプンcv内のカラー画像はBGRの順にカラー画像を構成していますので、他の場所とは画像を採用する順番が異なります。
関数の形で3つの配列を形成し、関数が返した値が3つを超えると、配列として返されます。
コードは以下の通りです。

#            
def get_random_color():
  B = random.randint(0, 255)
  G = random.randint(0, 255)
  R = random.randint(0, 255)
  #           
  #     if               255(        )
  if B == 255:
    B = 0
  elif G == 255:
    G = 0
  elif R == 255:
    R = 0
  return(B, G, R)
もしあなたが心配しているなら、行列を返したかどうかを検証してもいいです。

#           
a = get_random_color()
print(a)
4.色ランダムを生成し、数値ランダムのデジタル生成関数get_ランドムnumber()
この関数は比較的簡単で、原理は上のランダムに色の組み合わせを生成するのと同じです。
コードは以下の通りです。

#       
def get_random_number():
  random_num = str(random.randint(0, 9))
  return random_num
5.ランダムに綺麗な(ノイズノイズのない)デジタル認証コード画像を生成する
PILを使用したImage、ImageDraw、ImageFontはそれぞれ白色の画像背景を生成するために用いられ、画像に数字を書き込むためのブラシを定義し、文字の字形とフォントサイズを定義します。
コードは以下の通りです。

def generate_image():
  #       ,'RGB'  ,   (150,50),     (255,255,255)
  image = Image.new('RGB', (150, 50), (255,255,255))
  #     ,        
  draw = ImageDraw.Draw(image)
  #             
  font = ImageFont.truetype("arial.ttf", size=36)

  name = "" #          ,        ,     
  for i in range(5):
    random_number = get_random_number()
    #            ,       
    name += random_number

    #         ,   :  、  (   )、  、  
    draw.text((10+i*30, 0), random_number, get_random_color(), font=font)
  #             ,    xxxx        
  image.save('G:\xxxxxx\xxxxxxxx\%s.png' % name)
フォントは自分のコンピュータの既存のフォントによって選択できます。具体的な経路はC:\Windows\Fontsです。

 font = ImageFont.truetype("arial.ttf", size=36)
6.画像にノイズを追加する
関数のこのステップは新しい関数を使わずに、前の関数を続けます。イメージ()はコードを入力しますが、なぜ使わないですか?画像を読み込む時はnameという関数が使われますので、新しい関数を使うとこの変数は使えません。もちろん、クラスの方法によって、二つの関数の間の変数を相互に呼び出すことができます。
コードは以下の通りです。
(再度注意してください。下記のコードは続いてgenerate_です。イメージ()のため、下のコードは一つのインデントがあります。

width = 150
  height = 50
  #         ,  name        ,
  img = cv.imread('G:\xxxxxx\xxxxxxxxxxxx\%s.png' %name)
  #     
  for i in range(5):
    x = random.randint(0, width)
    y = random.randint(0, height)
    #      ,         :  、     、  、  ,
    #     thickness   None,     ,   -1     
    cv.circle(img, (x,y), 1, get_random_color(), -1)

  #     
  for i in range(3):
    x1 = random.randint(0, width)
    y1 = random.randint(0, height)
    x2 = random.randint(0, width)
    y2 = random.randint(0, height)
    #     ,     :  、      、      、  
    cv.line(img, (x1,y1), (x2,y2), get_random_color())
  #     
  cv.imwrite(r'G:\xxxxx\xxxxxxx\%s.png'%name, img)
7.関数を呼び出してデジタル認証コード画像を生成する
すべての関数はすでに書き終わりました。直接画像生成関数を呼び出してもいいです。
forサイクルを使って、Gnerate_を循環的に呼び出します。イメージ()は大量に画像を生成することができます。何枚で何回も繰り返します。

for i in range(30):
  generate_image()
8.まとめ
このステップですべての作業が完了しました。保存されている指定のフォルダを確認してみてください。成功的に作成されたかどうかは、通常のプログラムにエラーがなくても基本的には作成できます。
csdnを初めて使って文章を書いたら、間違いなく多くの間違いと不足があります。何か提案や意見がありましたら、下のコメントで提出してください。一つ一つ訂正します。ありがとうございます。
ここでは、python-opencvを使って、ノイズのあるデジタル認証コードを大量に生成する方法についての記事を紹介します。これまでの記事を検索してください。または、下記の関連記事をご覧ください。これからもよろしくお願いします。