2017-06-07 13 views
0

イメージ上でテキストブロックが使用している領域の割合を検出したいと思います。アイデアは、40%以上のテキストを含むイメージを拒否することです。私はテキストhereを検出する際に非常に有益で詳細な投稿を見ました。リンクにはC++が使用されています。私はそれをPythonで使う考えを得ることができると思う。イメージ上のテキストを検出し、OpenCvを使用して領域を計算します

しかし、使用している領域のパーセンテージを測定するには、どのような方法が最適かわかりません。私たちが使用できるような類似の実装がありますか?私はちょうどCvを使い始めています。

私は以下のように私のテキストをpythonで取得しています。これは、フォーラムでオンラインで作業するために見つけたコードです。

import cv2 

def captch_ex(file_name): 
    img = cv2.imread(file_name) 
    img_final = cv2.imread(file_name) 
    img2gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    ret, mask = cv2.threshold(img2gray, 180, 255, cv2.THRESH_BINARY) 
    image_final = cv2.bitwise_and(img2gray, img2gray, mask=mask) 
    ret, new_img = cv2.threshold(image_final, 180, 255, cv2.THRESH_BINARY) 



    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3,3)) 
    dilated = cv2.dilate(new_img, kernel, iterations=9) 

    contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 

    for contour in contours: 

     [x, y, w, h] = cv2.boundingRect(contour) 


     if w < 35 and h < 35: 
      continue 

     cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 255), 2) 


    cv2.imshow('captcha_result', img) 
    cv2.waitKey() 

file_name = 'my_image.jpg' 
captch_ex(file_name) 

しかし、さらに進めるにはどうすればよいですか?

+0

リンクの内容を読んだことがありますか?参考文献PythonでC++コードを書き直す別の答えがあります。何を試しましたか? – barny

+0

@barny私はしばらく前にテキスト検出を試みました。その部分は確信していますが、測定領域に関しては全く空白です。私は測定面積に関して何も試していないので、どこから始めるべきかわからない。だから手がかりを得たら、試してみたい。 – esafwan

+0

@barny私がオンラインで見つけた、私のために働いたコードを追加しました。 – esafwan

答えて

0

良い出発点は、バウンディングボックスの総面積(W * hで)を計算

  1. です。これは、テキストで覆われた画像の総面積に相当します。

  2. は、画像の総画素数(行* colsの)

をそのまま異なるフォントサイズやラインが存在する可能性があるため、この値は、正確ではありませんのでご注意くださいことを比較します間隔。イメージの40%がテキストで覆われている正確なマージンを決めるには、人によって識別されるように、約40%がテキストの上と下の両方で覆われた複数のイメージを選択することによってしきい値を見つけなければなりません。

関連する問題