private: System::Void mnuOpenCV_Click(System::Object^ sender, System::EventArgs^ e) { //OpenCVメニュー //処理後の画像データ IplImage* dst_img; //描画時間計測用 Diagnostics::Stopwatch^ sw = gcnew Diagnostics::Stopwatch; //メニューアイテム(どのメニューがクリックされたのか?) ToolStripMenuItem^ mnu = (ToolStripMenuItem^)sender; //画像データが無い場合 if (src_img == NULL) return; //処理時間計測開始 sw->Start(); //src_imgと同じサイズのIplImageの確保 dst_img = cvCreateImage(cvSize(src_img->width, src_img->height), src_img->depth, src_img->nChannels); //クリックされたメニューごとにOpenCVの処理 if (mnu->Name == "mnuThreshold"){ //二値化(しきい値127) cvThreshold(src_img, dst_img, 127, 255, CV_THRESH_BINARY); }else if (mnu->Name == "mnuSmooth3_3"){ //平滑化(3×3) cvSmooth(src_img, dst_img, CV_BLUR, 3, 3); }else if (mnu->Name == "mnuGaussian21_21"){ //ガウシアン(21×21) cvSmooth(src_img, dst_img, CV_GAUSSIAN , 21, 21); }else if (mnu->Name == "mnuDilate"){ //膨張 cvDilate(src_img, dst_img, NULL , 1); }else if (mnu->Name == "mnuErode"){ //収縮 cvErode(src_img, dst_img, NULL , 1); }else{ return; } //処理後の画像を元の画像データにコピーする。 cvCopy(dst_img, src_img); //解放 cvReleaseImage(&dst_img); //処理時間計測停止 sw->Stop(); //処理時間の表示 toolStripStatusLabel2->Text = mnu->Text + "処理時間 = " + sw->ElapsedMilliseconds.ToString() + "msec"; //画像の描画 DrawCvImage(src_img); } |