研究してます
期限を決めろ
期限がないと頑張れません.
「これこれをいついつまでに」と決まっていると,大まかな完成目標と,
それに向けてのペース配分が決まります.
それを決めずに「まあ適当にやってりゃ終わるっしょ」と進めていると
ペースも上がらず,見通しも立たず,中途半端で終わって後で後悔します.
最近気づきました.
OpenCVでプログラミング
初心者でも信じられないくらいわかりやすいです.
ゴリラになりたい.
画像のデータ型
OpenCVでは画像を行列として扱います.
整数はint,浮動小数点型はdouble,画像はMat,ゴリラはgori.実にわかりやすい.
Matについてはここがわかりやすいし,だいたいのことは載っています
cv::Matの基本処理 — OpenCV-CookBook
画像のコピーとか,サイズの取得の仕方とかはここで学びます.
横幅がxでcols,縦幅がyでrowsです.毎回わからなくなります.
これであなたもOpenCVでコードがかけます.
//画像の読み込み Mat magi = imread("magihara.jpg"); //画像を表示するウィンドウを作る namedWindow("magihara", CV_WINDOW_AUTOSIZE); //画像の表示 imshow("magihara", magi);
画像は普通,色を持っているので,RGBでデータを保存する必要がありますね.
Matのチャンネル数がそれに当たります.
どのような値で画像を保存するかも重要です.
通常の場合,OpenCVは8ビット符号なし整数(uchar)で画像を読み込みます.
輝度の最小値が0,最小値が255となります.
それが3チャンネルで,画像の型としてはCV_8UC3である.実にわかりやすい.
ただ,画像の値を使って計算したいときはもっと精度が欲しい時があります.
32ビット小数(float)ならCV_32FC3
64ビット小数(double)ならCV_64FC3
どちらも値は0~1です.
細かければいいというわけでもないので,適材適所というやつです.
imshow関数で画像を実際に表示するときは,0~255の8ビット整数が使われるので
小数型の画像をimshowすると真っ黒になります.注意しましょう.
//画像の読み込み Mat magi = imread("magihara.jpg"); //Float, Double型の画像を用意する. Mat magiFloat, magiDouble; //型変換.0~1の範囲に0~255は入るはずがないのでスケール変換をします. magi.convertTo(magiFloat, CV_32FC2, 1.0/255); magi.convertTo(magiDouble, CV_64FC2, 1.0/255); //画像を表示するウィンドウを作る namedWindow("magihara Int", CV_WINDOW_AUTOSIZE); namedWindow("magihara Float", CV_WINDOW_AUTOSIZE); namedWindow("magihara Double", CV_WINDOW_AUTOSIZE); //画像の表示 imshow("magihara Int", magi); imshow("magihara Float", magiFloat); imshow("magihara Double", magiDouble);
"magihara Int"以外のウィンドウは闇が表示されます.残念でした.
あなたもたのしいOpenCV!