Kinectで画像処理 第2回
今回の実験で使用するプログラムは、以下のものです プログラムのソースは https://github.com/K4W2-Book/K4W2-Book これからの演習には、この中のプログラムを使 用する。
KinectV2-Color-01.zipを解凍 今回はこのプロジェクトを用いる。 Kinectなどの複雑なものを扱うプログラムでは、 サンプルプログラムが公開されているので、そ れを修正するという使い方が普通
main.cpp maincolor.pdfで中 を理解しましょう
実行ファイル作成の際には、画像関係を扱うに は、Releaseモードで行ったほうが速い。 ここでモードを選んで、それぞれビルドする必 要がある。実行ファイルは、Release, Debug フォルダの中にできる。
Visual Studioプロジェクトの使い方 Kinect/K4W2-Book-master/C++(Native) フォルダを自分の PCに置く。 C++(Native) /01_Color/KinectV2-Color-01/KinectV2.slnをダブルク リック。 プロジェクト-NuGetパッケージ管理から、OpenCVを選 ぶ(versionは2.4.10)。 ビルド これで実行できれば、プログラム作成に進む。 このプロジェクトは、基本的にmain.cppのみなので、それ の説明を、maincolor.pdfに書いている。参考にすること。
課題 halfImage(サンプルではharfImageとなっているが、正しいスペルに直す)を以 下のように処理せよ。 課題提出方法 KinectAppクラスに、メンバー関数kadai1prog()を追加し、run()の中でそれを呼ぶ形で、以下の 処理を追加せよ。 halfImageをcv::splitで4枚の1チャネル画像singlechannels[0] ~singlechannels[3]に分ける それの1枚目(B画像)を、閾値処理(閾値th = 127)し、グレースケール画像(gray)に格納、 それを別のウィンドウにimshowで表示。 終了する直前に、imwrite関数を使って、halfImageを”halfImage.png”, gray画像を”gray.png”に保 存せよ。 課題提出方法 出来たプログラム(main.cpp)および画像ファイルhalfImage.png, gray.pngを、添 付で、田中(m_tanaka@center.konan-u.ac.jp)に送付 メール本文には、感想などを書いてください。 授業時間内にできない場合は、次の実験及び演習がある前日までに送付のこ と
4チャネル画像を4枚の1チャネル画像に分割する方法 std::vector<cv::Mat> singlechannels; としておいて、4チャネル画像halfImageを cv::split(halfImage, singlechannels); とすれば、 singlechannels[0] (チャネル0の画像=B) singlechannels[1] (チャネル1の画像=G) singlechannels[2] (チャネル2の画像=R) singlechannels[3] (チャネル3の画像=A): 使わない ができる(次ページ参照)。
4チャネル画像 halfImage cv::split cv::threshold Singlechannels[0] B gray
2値化の方法 画像処理の最も基本的な処理 何かの値がある値(閾値という)よりも、大き いとき白、小さいとき黒(あるいは逆)に塗る 例 Kinectで読み込んだカラー画像をモノクロ(1 channelデータ)にする cv::thresholdを使う
OpenCVの関数の調べ方 thresh 255 maxVal thresh 255 maxVal http://opencv.jp/opencv-2svn/cpp/miscellaneous_image_transformations.html#cv-threshold にあるマニュアルによると double threshold(const Mat& src, Mat& dst, double thresh, double maxVal, int thresholdType) 要するに、引数は src: Mat型入力変数(処理のもとの画像) dst: Mat型出力変数(処理結果の画像) thresh: 閾値(0以上、255以下) maxVal: 閾値より大きいとき出力をこの値にする thresholdType: CV_THRESH_BINARY CV_THRESH_BINARY_INV ほかにもある(マニュアル参照) thresh 255 maxVal thresh 255 maxVal
閾値処理のプログラム例(参考) #include <pragma230.h> 【画像2値化の例】 #include <pragma230.h> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; int main(int argc, char *argv[]) { Mat gray_img = imread("lena.jpg", 0);//モノクロで読み込む if(gray_img.empty()) return -1; // 固定の閾値処理 Mat bin_img; // 入力画像,出力画像,閾値,maxVal,閾値処理手法 threshold(gray_img, bin_img, 150, 255, THRESH_BINARY); // 結果画像表示 namedWindow("Binary", WINDOW_AUTOSIZE); imshow("Binary", bin_img); waitKey(0); }