C++ 对多张图像进行两两处理

需求分析

简而言之,使用OpenCVaddWeighted函数,对多张图像,进行两两合并融合。

原图像

在这里插入图片描述【注】图像来自于互联网,侵删。

代码实现

/*
该程序是测试,测试多张图像进行循环处理
测试成功
*/

#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;

	cv::Mat img1 = cv::imread("./modelLearn_1/0.jpg");
	cv::Mat img2 = cv::imread("./modelLearn_1/8.jpg");
	cv::Mat img3 = cv::imread("./modelLearn_1/2.jpg");
	cv::Mat img4 = cv::imread("./modelLearn_1/4.jpg");

	cv::Size dsize = cv::Size(280, 200);
	cv::resize(img1, img1, dsize);
	cv::resize(img2, img2, dsize);
	cv::resize(img3, img3, dsize);
	cv::resize(img4, img4, dsize);

	roiVec.push_back(img1);
	roiVec.push_back(img2);
	roiVec.push_back(img3);
	roiVec.push_back(img4);

	*/

	// 定义存储图像类型的容器
	std::vector<cv::Mat> roiVec;

	// 【知识点1】 glob 循环遍历文件夹中的图像
	std::vector<cv::String> vecFileList;
	cv::glob(cv::String("./modelLearn/tmp/*.jpg"), vecFileList, true);  // 目的是将该路径路径下的所有文件名存入vecFileList


	// 遍历图像,将图像保存至图像容器 roiVec 中
	for (int p = 0; p < vecFileList.size(); p++) {

		cv::Mat imgSource = cv::imread(vecFileList[p].c_str(), cv::ImreadModes::IMREAD_UNCHANGED);

		// resize 图像
		cv::Size dsize = cv::Size(280, 200);
		cv::resize(imgSource, imgSource, dsize);

		roiVec.push_back(imgSource);
	}

	// 【知识点2】 使用迭代器 iterator 读取容器 roiVec 中的图像
	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) {    // (j=0)是错误表达,(j==0)是正确表达

			cv::addWeighted(roiVec[j], 0.5, roiVec[j + 1], 0.5, 0.0, myMax);
		}
		//else if (j != 0) {
		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 读取容器中的图像。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值