##画像の切り取りについて
趣味でOpenCVを利用している人や研究でOpenCVを利用している人、どちらも画像の切り取りを使いと思うときはあるはずです。画像の切り取りは非常に簡単ですが、座標を求めないとどこを切り取りたいのか分かりません。座標の求め方は次回しますので、ここでは単なる切り取りのご紹介。
##Mark5 画像の切り取り
#include <opencv2/opencv.hpp>
#include<iostream>
#if _DEBUG
#pragma comment(lib,"opencv_world430d.lib")
#else
#pragma comment(lib,"opencv_world430.lib")
#endif
using namespace cv;
using namespace std;
int main(void) {
Mat img = imread("C:\\opencv\\sources\\samples\\data\\lena.jpg");
img = Mat(img, Rect(150, 200, 200, 140));
imshow("View", img);
waitKey();
return 0;
}
######解説①
今回追加されたのはこれです。
img = Mat(img, Rect(150, 200, 200, 140));
これらの引数は
出力画像 = Mat(入力画像, Rect(x座標, y座標, 横幅(width), 縦幅(height)));
の意味を持ちます。
######解説②
座標は画像ツールとかでも見ることができると思います。
##Mark6 画像中に四角を書く
#include <opencv2/opencv.hpp>
#include<iostream>
#if _DEBUG
#pragma comment(lib,"opencv_world430d.lib")
#else
#pragma comment(lib,"opencv_world430.lib")
#endif
using namespace cv;
using namespace std;
int main(void) {
Mat img = imread("C:\\opencv\\sources\\samples\\data\\lena.jpg");
rectangle(img, Point(0, 295), Point(180, 430),Scalar(255, 0, 0), 5);
imshow("View", img);
waitKey();
return 0;
}
######解説①
今回追加されたのはこれです。
rectangle(img, Point(0, 295), Point(180, 430),Scalar(255, 0, 0), 5);
rectangleの引数は
rectangle(入出力画像, Point(長方形の左上の座標), Point(長方形の右下の座標),Scalar(BGRカラー指定), 線の太さ);
######解説②
これ以上解説ないな・・・
rectangleは二つの座標点が必要だから気を付けましょう。Rectも二つの座標からも切り取れるので試してみてください。このような矩形をバウンディングボックスともいうみたいです。詳しく知りたい人はバウンディングボックスで検索してみてもいいかも。
##最後に
どちらも画像を扱う時には必ず出会うものだと思います。一度試してみてはどうでしょう。
最近、鬼〇の刃を見に行きました。かっこよくてテンションアゲアゲです。「OpenCVの呼吸 壱ノ型 rectangle」ぜひ使ってみてください。