6

Click here to load reader

Cpp cv04

Embed Size (px)

DESCRIPTION

C++/OpenCV 入門04 フィルタリング、画像を重ねる(Add)、ROI(注目領域)

Citation preview

Page 1: Cpp cv04

C++ / OpenCV 入門 04

熊本大学 胡(ITS)研究室D1 藤本賢志2014/09/24

Page 2: Cpp cv04

今日の内容

・フィルタリング

・画像を重ねる

・ROI 注目領域

Page 3: Cpp cv04

フィルタリング

カーネルの作成(鮮鋭化)

void sharpen2D(const cv::Mat &image, cv::Mat &result){

 cv::Mat kernel(3, 3, CV_32F, cv::Scalar(0));

 kernel.at<float>(1, 1) = 5.0;

 kernel.at<float>(0, 1) = -1.0;

 kernel.at<float>(2, 1) = -1.0;

 kernel.at<float>(1, 0) = -1.0;

 kernel.at<float>(1, 2) = -1.0;

 cv::filter2D(image, result, image.depth(), kernel);

}

読むだけ アドレス指定

float型 すべてゼロに初期化

フィルタリング関数、中身の処理は調べてね

0 -1 0

-1 5 -1

0 -1 0

Page 4: Cpp cv04

画像を重ねる

1.単純な加算

   cv::add(image, image2, result);

2.下駄をはかせる

   cv::add(image, cv::Scalar(50), result);

3.重みづけして加算

 cv::addWeighted(image, 0.7, image2, 0.1, 0, result);

→ result = image * 0.7 + image2 * 0.1;

    *こっちが簡単、四則演算もできるがMatサイズに注意

4.スカラ倍して加算

    cv::scaleAdd(image, 0.5, image2, result);

Matサイズは同じ

Page 5: Cpp cv04

ROI 注目領域指定した領域にロゴを貼り付ける

cv::Mat image = cv::imread("img.jpg", 0);

cv::Mat result(image.size(), 0);

cv::Mat logo = cv::imread("logo.jpg", 0);

// define image ROI

cv::Mat imageROI;

imageROI = image(cv::Rect(150, 150, logo.cols, logo.rows));

// add logo to image

cv::addWeighted(imageROI, 1.0, logo, 0.3, 0., imageROI);

cv::imshow("ROI", imageROI);

cv::waitKey(0);

cv::imshow("image", image); //再表示でROIが反映、Resetする必要ない

cv::waitKey(0);

開始位置 サイズ

Page 6: Cpp cv04

参考文献

OpenCV2 Computer Vision Application Programming Cookbookhttp://amzn.to/1pjWFe3

ソースコード

https://code.google.com/p/opencv-cookbook/source/browse/trunk/