プロが教えるわが家の防犯対策術!

以下のプログラムはOpenCVで画像の上に別な画像を貼り付けるプログラムなのですが、
各関数の役割について詳しく説明して頂けないでしょうか?

#include <opencv2/opencv.hpp>

// 画像を画像に貼り付ける関数
void paste(cv::Mat dst, cv::Mat src, int x, int y, int width, int height) {
cv::Mat resized_img;
cv::resize(src, resized_img, cv::Size(width, height));

if (x >= dst.cols || y >= dst.rows) return;
int w = (x >= 0) ? std::min(dst.cols - x, resized_img.cols) : std::min(std::max(resized_img.cols + x, 0), dst.cols);
int h = (y >= 0) ? std::min(dst.rows - y, resized_img.rows) : std::min(std::max(resized_img.rows + y, 0), dst.rows);
int u = (x >= 0) ? 0 : std::min(-x, resized_img.cols - 1);
int v = (y >= 0) ? 0 : std::min(-y, resized_img.rows - 1);
int px = std::max(x, 0);
int py = std::max(y, 0);

cv::Mat roi_dst = dst(cv::Rect(px, py, w, h));
cv::Mat roi_resized = resized_img(cv::Rect(u, v, w, h));
roi_resized.copyTo(roi_dst);
}

// 画像を画像に貼り付ける関数(サイズ指定を省略したバージョン)
void paste(cv::Mat dst, cv::Mat src, int x, int y) {
paste(dst, src, x, y, src.rows, src.cols);
}

int main() {
cv::Mat img1 = cv::imread("Lenna.jpg"); // 画像の読み込み
cv::Mat img2 = cv::imread("cat.jpg"); // 画像の読み込み

// img1にimg2を貼り付ける。位置 x=105, y=110, サイズ80x80
paste(img1, img2, 105, 110, 80, 80);

cv::namedWindow("result"); // ウィンドウの準備
cv::imshow("result", img1); // 画像の表示
cv::waitKey(); // キー入力待ち
}

A 回答 (2件)

ライブラリ関数の役割は、そのライブラリのリファレンスマニュアルやドキュメントを参照するものです。

こんな感じに検索すれば、簡単に情報は手に入ります。Q&Aサイトやフォーラムなどの生き字引をあてにするのではなく、確かな情報源から必要な情報を得る努力をすることが第一歩だと思います。

https://www.google.co.jp/search?q=opencv+referen …
https://www.google.co.jp/search?q=opencv+documen …
https://www.google.co.jp/search?q=opencv+sample+ …
    • good
    • 2

恐らく英語サイトばっかりだと思うけど、特定のライブラリの質問をするなら、


それ専用のフォーラム等で質問した方が良いでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!