Click here to load reader
Upload
satoshi-fujimoto
View
165
Download
2
Embed Size (px)
DESCRIPTION
C++/OpenCV 入門04 フィルタリング、画像を重ねる(Add)、ROI(注目領域)
Citation preview
C++ / OpenCV 入門 04
熊本大学 胡(ITS)研究室D1 藤本賢志2014/09/24
今日の内容
・フィルタリング
・画像を重ねる
・ROI 注目領域
フィルタリング
カーネルの作成(鮮鋭化)
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
画像を重ねる
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サイズは同じ
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);
開始位置 サイズ
参考文献
OpenCV2 Computer Vision Application Programming Cookbookhttp://amzn.to/1pjWFe3
ソースコード
https://code.google.com/p/opencv-cookbook/source/browse/trunk/