1枚目の画像は矢印の部分だけをアルファチャンネルの値を255にし,それ以外を0とした画像です.
それを2枚目に重ねたいのですが,結果画像が3枚目でよくわからない結果になってしまいました.
やりたいことは,単に1枚目の写真の矢印の部分だけをそのまま2枚目に重ねたいだけなのですが,訳が分からない状態です.
どうしたらよいのでしょうか.
以下がそのコードです.
なお,image0が1枚目,image1が2枚目の画像になっており,それぞれの画像のサイズは同じです.
dst_imgは生成する画像です.
cv::Mat image0 = cv::imread(filenamein0, 1);
cv::Mat image1 = cv::imread(filenamein1, 1);
cv::Mat dst_img = cv::Mat::zeros(1050, 1250, CV_8UC3);
for (int y = 0; y < image0.rows; y++) { for (int x = 0; x < image0.cols; x++) { a = image0.at<cv::Vec4b>(y, x)[3]; if (a == 0) { dst_img.at<cv::Vec3b>(y, x)[0] = image1.at<cv::Vec3b>(y, x)[0]; dst_img.at<cv::Vec3b>(y, x)[1] = image1.at<cv::Vec3b>(y, x)[1]; dst_img.at<cv::Vec3b>(y, x)[2] = image1.at<cv::Vec3b>(y, x)[2]; } else { dst_img.at<cv::Vec3b>(y, x)[0] = image1.at<cv::Vec3b>(y, x)[0] + image0.at<cv::Vec3b>(y, x)[0] * (a / 255); dst_img.at<cv::Vec3b>(y, x)[1] = image1.at<cv::Vec3b>(y, x)[1] + image0.at<cv::Vec3b>(y, x)[1] * (a / 255); dst_img.at<cv::Vec3b>(y, x)[2] = image1.at<cv::Vec3b>(y, x)[2] + image0.at<cv::Vec3b>(y, x)[2] * (a / 255); } } }
OpenCVの話なのであれば,質問にOpenCVタグをつけてください.