需求分析
简而言之,使用OpenCV 的addWeighted 函数,对多张图像,进行两两合并融合。
原图像
【注】图像来自于互联网,侵删。
代码实现
#include <opencv2/opencv.hpp>
#include <imgproc/types_c.h>
#include <core/base.hpp>
using namespace std;
using namespace cv;
int main(){
std::vector<cv::Mat> roiVec;
std::vector<cv::String> vecFileList;
cv::glob(cv::String("./modelLearn/tmp/*.jpg"), vecFileList, true);
for (int p = 0; p < vecFileList.size(); p++) {
cv::Mat imgSource = cv::imread(vecFileList[p].c_str(), cv::ImreadModes::IMREAD_UNCHANGED);
cv::Size dsize = cv::Size(280, 200);
cv::resize(imgSource, imgSource, dsize);
roiVec.push_back(imgSource);
}
cv::Mat myMax;
int j = 0;
for (vector<cv::Mat>::iterator iter = roiVec.begin(); iter != roiVec.end(); ++iter) {
cout << "j的值为:" << j << endl;
cout << "roiVec.size:" << roiVec.size() << endl;
if (j == 0) {
cv::addWeighted(roiVec[j], 0.5, roiVec[j + 1], 0.5, 0.0, myMax);
}
else {
cv::addWeighted(myMax, 0.5, roiVec[j + 1], 0.5, 0.0, myMax);
}
if (j == roiVec.size() - 2) {
break;
}
j++;
}
cv::imwrite("./matchTemplateImg/result.png", myMax);
return 0;
}
最终效果
知识点讲解
知识点1
使用 glob 循环遍历文件夹中的图像;
知识点2
使用迭代器 iterator 读取容器中的图像。
|