画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

プロフィール

Akira

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

01 | 2008/02 | 03
S M T W T F S
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C++/CLI】画像の輝度値を取得、設定する

一般的にGetPixel、SetPixelにより画像の輝度値を取得、設定する方法がよく解説されていますが、モノクロ8Bitの画像データではSetPixelが使えなかったり、処理速度が遅いので、画像データにポインタでアクセスする方法を説明したいと思います。

◆サンプルプログラムのイメージ

 

画像の輝度値の取得、設定 
サンプルプログラムのソースは、以下のリンクを『右ボタンクリック⇒対象をファイルに保存』
  VisualStudio2008Express版
  VisualStudio2005Express版
でダウンロードできます。


◆画像ファイルを開く

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    //ファイルを開く
   
    //ファイルを開くダイアログ
    OpenFileDialog^ OpenDlg = gcnew OpenFileDialog;
    //ファイルフィルタ
    OpenDlg->Filter = "画像ファイル(*.bmp,*.jpg,*.jpeg,*.png,*.tif,*.tiff,*.ico)|*.bmp;*.jpg;*.jpeg;*.png;*.tif;*.tiff;*.ico";
    //ダイアログの表示
    OpenDlg->ShowDialog();
   
    if (OpenDlg->FileName == ""){
     //ファイル名が指定されなかった場合
     return;
    }

    //Bitmapをファイルより作成
    bmp = gcnew Bitmap(OpenDlg->FileName);

    //ピクチャボックスへ画像の表示
    pictureBox1->Image = bmp;
   
   }


開くことのできる画像ファイルは、bmpファイル、jpegファイル、pngファイル、tifファイル、icoファイルです。

◆輝度値の取得、設定 

private: System::Void button3_Click(System::Object^  sender, System::EventArgs^  e) {
    //輝度値の取得、設定(二値化)
   
    int i, j;
    int Bright; //モノクロ輝度値
    int B, G, R;//カラー輝度値
    int BitCount;
    int Step;
    Byte Threshold;

    //しきい値の取得
    bool result = Byte::TryParse(textBox1->Text, Threshold);
    if (result == false) return;

    //輝度値を取得、設定する領域
    Rectangle rect = System::Drawing::Rectangle(0, 0, bmp->Width, bmp->Height);

    //Lock
    Imaging::BitmapData^ bmpData = bmp->LockBits(rect, Imaging::ImageLockMode::ReadWrite, bmp->PixelFormat);
   
    //ビットマップデータのメモリのポインタ
    Byte* pBuf = (Byte*)bmpData->Scan0.ToPointer();

    //画像データのビット数
    BitCount = bmp->GetPixelFormatSize(bmp->PixelFormat);

    //輝度値の取得、設定
    switch (bmp->PixelFormat){
       case Imaging::PixelFormat::Format8bppIndexed:
          //8ビットデータの場合

          for (j = 0; j < rect.Height; j++){
             for (i = 0; i < rect.Width; i++){
                //輝度値の取得
                Bright = pBuf[i + j * bmpData->Stride];

                //輝度値の設定(二値化)
                if (Bright >= Threshold)
                   pBuf[i + j * bmpData->Stride] = 255; //白に設定
                else
                   pBuf[i + j * bmpData->Stride] = 0;  //黒に設定
              }
           }

           break;

       case Imaging::PixelFormat::Format24bppRgb:
          //24ビットカラーデータの場合
          //輝度値は
B,G,R,B,G,R・・・の順で格納されています。
       case Imaging::PixelFormat::Format32bppRgb:
          //32ビットカラーデータの場合
          //輝度値は
B,G,R,A,B,G,R,A・・・の順で格納されています。
    
          Step = BitCount / 8;

          for (j = 0; j < rect.Height; j++){
             for (i = 0; i < rect.Width; i++){
                //輝度値の取得
                B = pBuf[i * Step +     j * bmpData->Stride]; //青
                G = pBuf[i * Step + 1 + j * bmpData->Stride]; //緑
                R = pBuf[i * Step + 2 + j * bmpData->Stride]; //赤

                //輝度値の設定(二値化)
                if ((B >= Threshold) || (G >= Threshold) || (R >= Threshold)){
                   pBuf[i * Step +     j * bmpData->Stride] = 255; //青
                   pBuf[i * Step + 1 + j * bmpData->Stride] = 255; //緑
                   pBuf[i * Step + 2 + j * bmpData->Stride] = 255; //赤
                 }else{
                    pBuf[i * Step +     j * bmpData->Stride] = 0; //青
                    pBuf[i * Step + 1 + j * bmpData->Stride] = 0; //緑
                    pBuf[i * Step + 2 + j * bmpData->Stride] = 0; //赤 
                 }
             }
          }

         break;
    
       default:
          MessageBox::Show("未対応ファイルフォーマットです。");
          bmp->UnlockBits(bmpData);
          return;
    }

    //UnLock
    bmp->UnlockBits(bmpData);

    //ピクチャボックスへ画像の表示
    pictureBox1->Image = bmp;

   }


最初に輝度値を取得する画像の範囲を指定します。

   
Rectangle rect = System::Drawing::Rectangle(0, 0, bmp->Width, bmp->Height);

座標は画像の左上が原点(0,0)となり、画像の右下が(Width - 1、Height - 1)となります。
この例では画像全体の領域を指定していますが、例えば

  
Rectangle rect = System::Drawing::Rectangle(50, 50, 150, 150);

のように画像の一部分を指定することも可能です。

【処理例】

画像のRegion Of Interest(ROI)処理

この処理は画像処理でいうところのRegion of interest(ROI)処理ですが、簡単にできちゃいます。
この時、画像データのポインタが画像の左上からRectangleで指定した領域の左上の位置へ移動するだけですので、ご注意下さい。(Strideの値に変わりはありません。)


輝度値の参照、設定にはBitmapDataプロパティのScan0プロパティを使って、画像データにポインタで参照します。

  
Byte* pBuf = (Byte*)bmpData->Scan0.ToPointer();

こうして得られた画像データのポインタ(pBuf)を使うことで画像データを参照、設定することができるようになります。
このポインタであらわされるメモリには画像の左から右、上から下へ向かって輝度値データが格納されています。通常のBitmapファイルのバイナリデータの向きとは上下が逆になるのでご注意下さい。

また、メモリの幅は従来どおり、4の倍数バイトとなるように調整されています。
この幅(バイト数)は

  bmpData->Stride

で取得できます。

このポインタ(pBuf)へは通常のC言語のポインタと同様に参照することができ、mallocなどで確保したメモリを、memcpy関数を使って画像データにコピーすることもできます。
ただし、ポインタへの書き込みはLockBitsのときの第二引数(ImageLockMode flags)が

  Imaging::ImageLockMode::ReadWrite

になっている必要があります。
この処理が可能なのは、LockBits~UnlockBitsまでの間です。

◆画像のファイル保存 

Private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
    //名前を付けて保存
   
    //ファイルを保存ダイアログ
    SaveFileDialog^ SaveDlg = gcnew SaveFileDialog;
    //ファイルフィルタ
    SaveDlg->Filter = "ビットマップファイル(*.bmp)|*.bmp|jpegファイル(*.jpg)|*.jpg|pngファイル(*.png)|*.png|tifファイル(*.tif)|*.tif";

    //ダイアログの表示
    SaveDlg->ShowDialog();
   
    if (SaveDlg->FileName == ""){
       //ファイル名が指定されなかった場合
       return;
    }else{
       //画像を名前を付けて保存

       //ファイル名の拡張子を取得し、小文字へ変換
       String^ ext = System::IO::Path::GetExtension(SaveDlg->FileName)->ToLower();

       //拡張子ごとに保存フォーマットを指定
       if (ext == ".bmp")
          //ビットマップ
          bmp->Save(SaveDlg->FileName, Imaging::ImageFormat::Bmp);
       else if (ext == ".jpg")
          //Jpeg
          bmp->Save(SaveDlg->FileName, Imaging::ImageFormat::Jpeg);
       else if (ext == ".png")
          //Ping
          bmp->Save(SaveDlg->FileName, Imaging::ImageFormat::Png);
       else if (ext == ".tif")
          //Tiff
          bmp->Save(SaveDlg->FileName, Imaging::ImageFormat::Tiff);
    }     
   }

画像のファイルへの保存は、ファイル名とファイルフォーマットを指定するだけで可能です。
Saveメソッドの第二引数(ImageFormat)は省略することも可能ですが、省略した場合、PNGファイルとして保存される場合があります。保存されたファイルのプロパティを見ただけでは、PNGファイルで保存されているかどうか分かりづらいので、できるだけ、フォーマットは指定しておいた方が無難です。



Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C++/CLI】モノクロ画像の上に線などを描画(サンプルプログラム付き)

モノクロ画像の上に線などを描画する方法をまとめました。

【目標】

  • モノクロ/カラー区別なく画像の上に描画できること
  • 高速に描画できること
  • 再描画すること

作成したサンプルプログラムはこんな感じ↓です。

モノクロ画像の上に描画
(サンプルプログラムの使い方)
各ボタンをクリックするとファイルを開くダイアログボックスが開きますので、ビットマップファイルを指定して下さい。
(ダウンロード)
Visual Studio 2008 Express Edition版
Visual Studio 2005 Express Edition版
(上記のリンクを右ボタンクリックし、対象をファイルに保存でダウンロードできます。)

準備
線の描画は条件を同じにするため、以下の関数を使い回しました。

  void DrawGraphics(Graphics^ g){
   //ギザギザ模様を画像の上に描画
   int i, j;
   //ギザギザの線の描画
   for (j = 0; j < 256; j+= 3){
        for (i = 0; i < 25; i++){
        g->DrawLine(Pens::Blue, i * 10, j, i * 10 + 5, j - 5);
        g->DrawLine(Pens::Blue, i * 10 + 5, j - 5, i * 10 + 10, j);
        }
    }
  }


よくあるサンプルプログラム  

  private: System::Void btnBitmap_Click(System::Object^  sender, System::EventArgs^  e) {
     //ビットマップファイルからBitmapクラスを作成し、ピクチャボックスへ渡す方法
     //モノクロ画像だとエラーになります。

     
     try{
        //描画時間計測用
        Diagnostics::Stopwatch^ sw = gcnew Diagnostics::Stopwatch;
     
        //ピクチャボックスの画像クリア
        pictureBox1->Image = nullptr;

        //画像ファイル名の取得
        String^ FileName = GetImageFilename(); //←オリジナル関数です
        //Bitmapクラスの作成
        Bitmap^ bmp = gcnew Bitmap(FileName);
        //PictureBoxへBitmapを表示する。
        pictureBox1->Image = bmp;
     
        //Graphicsクラスの作成
        //※モノクロ画像ファイルを開くと、ここでエラーになります。

        Graphics^ g = Graphics::FromImage(bmp);
        //画像の上にギザギザ模様の描画
        sw->Start();
        DrawGraphics(g);
        sw->Stop();
        //描画時間表示
        MessageBox::Show("描画時間 = " + sw->ElapsedMilliseconds.ToString() + " msec");

     }catch(Exception^ err){
        //エラーの表示
        MessageBox::Show(err->Message);
     }
    }


このプログラムではカラー画像では問題ないのですが、8ビットモノクロ画像ファイルを開くとFromImageメソッドでエラーとなります。

CreateGraphicsを使ってGraphicsクラスを作成する方法

  private: System::Void btnCreateGraphics_Click(System::Object^  sender, System::EventArgs^  e) {
     //CreateGraphicsを使ってGraphicsクラスを作成し描画する。
     //モノクロ画像の上にも描画できますが、描画時間がかなり遅くなります。
     //描画したギザギザ模様は再描画されません。

       
     try{
        //描画時間計測用
        Diagnostics::Stopwatch^ sw = gcnew Diagnostics::Stopwatch;

        //ピクチャボックスの画像クリア
        pictureBox1->Image = nullptr;

        //Graphicsクラスの作成(CreateGraphicsを使う)
        Graphics^ g = pictureBox1->CreateGraphics();
     
        //画像ファイル名の取得
        String^ FileName = GetImageFilename(); //←オリジナル関数です
        //Bitmapクラスの作成
        Bitmap^ bmp = gcnew Bitmap(FileName);
        //PictureBoxへBitmapを表示する。
        pictureBox1->Image = bmp;
        pictureBox1->Refresh();

        //画像の上にギザギザ模様の描画
        sw->Start();
        DrawGraphics(g);
        sw->Stop();
        //描画時間表示
        MessageBox::Show("描画時間 = " + sw->ElapsedMilliseconds.ToString() + " msec");

     }catch(Exception^ err){
        //エラーの表示
        MessageBox::Show(err->Message);
     }
    }


このプログラムでは、モノクロ画像ファイルを開いても、モノクロ画像の上に線を描画することができます。
ただし、遅い!!!
再描画もされません。 


PictureBoxと同じ大きさのBitmapクラスを作成し、ピクチャボックスのImageへ。画像データはDrawImageで描画

  private: System::Void btnDrawImage_Click(System::Object^  sender, System::EventArgs^  e) {
     //ピクチャボックス表示用と画像データ用と別のBitmapクラスを作成し、
     //ピクチャボックスにはDrawImageを使って画像を描画する。
     //モノクロ画像でも表示可能
     //再描画可能、CreateGraphicsを使うより高速

     try{
        //描画時間計測用
        Diagnostics::Stopwatch^ sw = gcnew Diagnostics::Stopwatch;

        //ピクチャボックスの画像クリア
        pictureBox1->Image = nullptr;

        //画像ファイル名の取得
        String^ FileName = GetImageFilename();  //←オリジナル関数です 
        //Bitmapクラスの作成
        Bitmap^ bmpFileImage = gcnew Bitmap(FileName);

        //PictureBoxの大きさを画像の大きさに合わせる
        pictureBox1->Width  = bmpFileImage->Width;
        pictureBox1->Height = bmpFileImage->Height;

        //PictureBoxと同じ大きさのBitmapクラスを作成する。
        Bitmap^ bmpPicBox = gcnew Bitmap(pictureBox1->Width, pictureBox1->Height);
        //空のBitmapをPictureBoxのImageに指定する。
        pictureBox1->Image = bmpPicBox;
        //Graphicsクラスの作成(空のピクチャボックスからGraphicsを作成する)
        Graphics^ g = Graphics::FromImage(pictureBox1->Image); 
     
        //PictureBoxへBitmapを描画する。
        g->DrawImage(bmpFileImage, 0, 0);
        pictureBox1->Invalidate();

        //画像の上にギザギザ模様の描画
        sw->Start();
        DrawGraphics(g);
        sw->Stop();
        //描画時間表示
        MessageBox::Show("描画時間 = " + sw->ElapsedMilliseconds.ToString() + " msec");

     }catch(Exception^ err){
        //エラーの表示
        MessageBox::Show(err->Message);
     }
    }

最初にピクチャボックスと同じ大きさのBitmapクラスを作成し、ピクチャボックスのImageクラスへ渡す。ピクチャボックスのImageからFromImageメソッドでGraphicsクラスを作成。
このようにすると、モノクロ画像の上にも線を描画することができ、再描画も勝手にしてくれます。
しかも、CreateGraphicsを使ってGraphicsクラスを作成した場合よりも、描画速度は10倍くらい速くなります。


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C++/CLI】8、16Bitモノクロ画像データでエラーとなるメソッド(関数)

モノクロのグレー画像では、いくつか使えないメソッドがあり、下記のようなエラーが表示される場合があります。

追加情報: インデックス付きのピクセル形式をもつイメージからグラフィックス オブジェクトを作成することはできません。

インデックス付きのピクセル形式とは、画像を表示するのにカラーテーブルを参照するような画像(例えばモノクロ8Bit画像データ)のことを指すようです。

このエラーとなる画像フォーマットは以下の通りです。

  • Format1bppIndexed
  • Format4bppIndexed
  • Format8bppIndexed
  • Format16bppArgb1555
  • Format16bppGrayScale
  • Undefined
  • DontCare

※Format16bppGrayScaleについては別途まとめました。
 Format16bppGrayScaleは使えるのか?実験してみた。のページを参照下さい。
 
これらのフォーマットに対応していないメソッドをまとめてみました。


System::Drawing::Graphics::FromImage

(例)
Graphics^ g = System::Drawing::Graphics::FromImage(img);

imgがモノクロ画像の場合、エラーとなります。

(回避例)
Graphics^ g = pictureBox1->CreateGraphics();

など、CreateGraphicsメソッドを用いるとエラーにはなりません。
ここで作成したGraphicsクラスgを用いて
g->DrawLine(Pens::Red, 0, 0, 100, 100);

このようにして、描画することもできるのですが、この方法だと再描画してくれなく、描画速度がかなり遅くなります。
詳細は「モノクロ画像の上に線などを描画」のページにまとめました。
サンプルプログラム付きですので、こちらも参照下さい。


System::Drawing::Bitmap::SetPixel

(例)
bmp->SetPixel(0, 0, Color::White);

bmpがモノクロBitmapの場合、エラーとなります。
System::Drawing::Imaging::BitmapData::Scan0プロパティを使って、画像データにポインタで参照、設定します。

(回避例) 
//ビットマップの領域
Rectangle rect = System::Drawing::Rectangle(0, 0, bmp->Width, bmp->Height);
//Lock
bmpData = bmp->LockBits(rect, Imaging::ImageLockMode::ReadWrite, bmp->PixelFormat);
//ポインタの取得
unsigned char* pBuf = (unsigned char*)bmpData->Scan0.ToPointer();
//ポインタを使って輝度値を設定する。
int Px = 100;
int Py = 100;

pBuf[Px + Py * bmpData->Stride] = 127; 
//UnLock
bmp->UnlockBits(bmpData);


この詳細は「画像の輝度値を取得、設定する」のページにまとめました。

 


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C++/CLI】二値化サンプルプログラム

目次ページへ

画像処理の基本中の基本、二値化処理のプログラムを作成しました。
処理が可能なのは、8ビットモノクロビットマップファイルおよび、24ビットカラービットマップファイルです。

【二値化処理前の画面】
【C++/CLI】二値化処理前

【二値化処理後の画面】
【C++/CLI】二値化処理後

このVisualStudio2008Express Editionで作成したサンプルプログラムのソースは
こちら(右ボタンクリック⇒対象をファイルに保存)よりダウンロードできます。

ソースコードは二値化処理としては無駄な部分が多々あるのですが、他のフィルタ処理開発でも応用できるように、分かりやすさ重視で作成しています。
処理の最適化については二値化のページの最後の方で紹介しています。

処理に必要な言語については「画像の輝度値を取得、設定する」のページで解説しています。もしよろしければ、ご参照下さい。

リニューアル!!
もう少しましなプログラムを作成しました。詳しくはこちら↓
.NET(C++/CLI)による画像拡大縮小表示、画像処理サンプルプログラム

  

 


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C++/CLI】テキストボックスの文字列を変数へ代入

テキストボックスの文字列を変数へ代入するには、Parseメソッドを使います。
(例)
int iVal = int::Parse(textbox1->Text);

文字列変換する型は必要に応じて変えてください。
ただし、この場合、テキストボックスに数値ではない文字列が入力された場合、エラーとなるので、エラー処理を行う場合はTryParseメソッドを用います。

(例)
int iVal;
bool result = int::TryParse(textbox1->Text, iVal );

テキストボックスの文字列がint 型として判断された場合、変数(上の例ではiVal)に値が代入され、戻り値(result)にtrueが戻されます。
失敗した場合は戻り値がfalseとなります。

このエラー処理を用いると、数値としてByte型の値(0~255)が欲しいときなど便利です。

(例)
Byte bVal ;
bool result = Byte::TryParse(textbox1->Text, bVal );

詳細はmsdn2の「Int32.TryParse メソッド 」に記載されています。


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【VisualStudio】ツールボックスのアイコン表示がおかしくなった場合

目次ページへ

なぜかVisualStudioを使っていると、途中でツールバーのアイコンがこんな感じ↓
ツールバーがおかしくなった場合

でおかしくなる場合があります。
でも、ちゃんと復帰方法もあります。

復帰方法

ツールボックスのウィンドウ上で右ボタン
      ↓
「ツールボックスのリセット」
      ↓
復帰完了!


Loading...
スポンサーリンク



現在の閲覧者数: / 合計