3

内部にいくつかの長方形を含む画像があります..必要なのは、(Java)またはJavaCVを使用して、赤い枠と白い背景を持つ長方形のみをトリミングすることです。

たとえば、ナンバー プレートの付いた車の画像があります。ナンバー プレートの各文字には、周囲に赤い縁取りの四角形と白い背景があります。

私が探しているのは、単一の画像で各文字をトリミングすることです..文字は、それぞれの周りの赤い枠付きの長方形と白い背景で識別されます。

助言がありますか?ありがとう

4

2 に答える 2

0

あなたはこれを試すかもしれません:

  1. 互いに近い赤いピクセルのグループを見つける
  2. これらに接続されているすべての赤いピクセルを見つける、バケツ塗りつぶしスタイル
  3. 見つかったすべてのピクセルの境界ボックスを計算します
  4. おそらく、赤いピクセルがすべて境界ボックスの縁に近いかどうかを確認してください
  5. 箱の中身がほぼ白かどうかを確認する

ボックスが中断されたり重なったりしない限り、これは機能するはずです。

于 2013-01-28T07:09:08.677 に答える
0
  1. 色空間をHSVに変更

     IplImage* imgHSV = cvCreateImage(cvGetSize(img), 8, 3);
     cvCvtColor(img, imgHSV, CV_BGR2HSV);
    
  2. 色相チャネルのみを取得:

    cvSplit( imgHSV, h_plane, s_plane, v_plane, 0 );
    
  3. しきい値処理を行って赤色を見つけます。

    cvInRangeS(h_plane, cvScalar(x, x, x), cvScalar(x, x, x), imgThreshed);
    

    x - HSV カラー モデルの赤の範囲。

    この後、白と黒の画像が作成されます。元の画像では白は赤です(あなたが言ったように、それらは長方形である必要があります)。

  4. 次に、cvFindContours 関数を使用します。

    int contoursCont = cvFindContours( imgThreshed, storage,&contours,sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
    
  5. 境界ボックス (長方形) を使用するには (すべての輪郭に対して):

    CvBox2D box = cvMinAreaRect2( @current_contour@,
                            CvMemStorage* storage CV_DEFAULT(NULL))
    

    背景の色を確認するには、そのヒストグラムを計算し、ビンの値が 255 と 0 (白と黒の値) だけであるかどうかを確認します。

うまくいけば、それは役に立つでしょう!

于 2013-01-28T07:50:13.623 に答える