クリックで果物を抽出

お盆に並べられた果物をクリックで抽出します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

クリックで抽出

  1. マスク画像を使うので ImageAI Class Version-3 を使って下さい。
    Version-3 Class は エッジ検出 を参照して下さい。
  2. Main.cpp の AppInit() から LoadBmp() で、お盆に並べられた果物の画像ファイルを入力します。
    InitDib() で DibStruct を初期化して下さい。
    WM_PAINT では入力した画像の上からマスクをかけて描画するので Dib.hMaskDC にもイメージを転送して下さい。
    char        ImgFile[]= "c:\\data\\test\\fruit.bmp";
    WORD        xp,yp;
    WORD        wd= 10;         // 閾値(幅)
    
    // 画像をロードして、24bit DIB を作成
    LRESULT  AppInit(HWND hwnd)
    {
        ImageAI= new IMAGEAI(hwnd);
        if (ImageAI->LoadBmp(ImgFile)==false)   return false;
        ImageAI->Adjust(true);
        ImageAI->InitDib();
        ImageAI->Show(ImageAI->Dib.hBmpDC,0,0);
        ImageAI->Show(ImageAI->Dib.hMaskDC,0,0);
        return true;
    }
    
  3. WM_PAINT: では、お盆に並べられた果物にマスク(Dib.hMaskDC)をかけて描画します。
            case WM_PAINT:          // Mask を使って画像を描画
                hdc = BeginPaint(hWnd,&ps);
                if (ImageAI)
                {   ImageAI->Show(hdc, 0, 0);
                    ImageAI->AndMask(hdc, 0, 0);
                }
                EndPaint(hWnd, &ps);
                break;
    
  4. WM_RBUTTONDOWN: では、お盆に並べられた果物をクリックで選択します。
    クリックで選択された果物のマスクを Set_Mask() で作成します。
            case WM_RBUTTONDOWN:    // 右ボタンをクリック
                xp= LOWORD(lp);
                yp= HIWORD(lp);
                wd= 10;
                ImageAI->Set_Mask(xp,yp,wd);
                InvalidateRect(hWnd,NULL,FALSE);
                break;
    
  5. WM_LBUTTONDOWN: では閾値をアップしながら Set_Mask() を呼び出します。
            case WM_LBUTTONDOWN:    // 左ボタンをクリック
                wd= wd+5;
                ImageAI->Set_Mask(xp,yp,wd);
                InvalidateRect(hWnd,NULL,FALSE);
                break;
    
  6. プログラムを実行すると「お盆に並べられた果物の画像」が表示されます。
    最初に「右クリックで果物を選択」して下さい。
    左クリックする毎に、閾値がアップされて描画範囲が広がります。
    再び右クリックするとクリックされた別の果物が選択されます。
    Set_Mask() 関数は Mask 画像を使う を参照して下さい。

[Next Chapter ↓] BMP32 Color ⇒ Gray
[Previous Chapter ↑] Mask 画像を使う

超初心者のプログラム入門(Win32API C++)