IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ 对多张图像进行两两处理 -> 正文阅读

[C++知识库]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 读取容器中的图像。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:43:20  更:2021-07-17 11:45:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 9:38:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码