OpenCV3.3中主成分分析(Principal Components Analysis, PCA)接口简介及使用

2023-11-05

OpenCV3.3中给出了主成分分析(Principal Components Analysis, PCA)的实现,即cv::PCA类,类的声明在include/opencv2/core.hpp文件中,实现在modules/core/src/pca.cpp文件中,其中:

(1)、cv::PCA::PCA:构造函数;

(2)、cv::PCA::operator():函数调用运算符;

(3)、cv::PCA::project:将输入数据投影到PCA主成分空间;

(4)、cv::PCA::backProject:重建原始数据;

(5)、cv::PCA::write:将特征值、特征向量、均值写入指定的文件;

(6)、cv::PCA::read:从指定文件读入特征值、特征向量、均值;

(7)、cv::PCA::eigenvectors:协方差矩阵的特征向量;

(8)、cv::PCA::eigenvalues:协方差矩阵的特征值;

(9)、cv::PCA::mean:均值。

关于PCA的介绍可以参考: http://blog.csdn.net/fengbingchun/article/details/78977202 

以下是使用ORL Faces Database作为测试图像。关于ORL Faces Database的介绍可以参考: http://blog.csdn.net/fengbingchun/article/details/79008891 

测试代码如下:

#include "opencv.hpp"
#include <string>
#include <vector>
#include <memory>
#include <algorithm>
#include <opencv2/opencv.hpp>
#include <opencv2/ml.hpp>
#include "common.hpp"

// PCA(Principal Component Analysis) ///
int test_opencv_pca()
{
	// reference: opencv-3.3.0/samples/cpp/pca.cpp
	const std::string image_path{ "E:/GitCode/NN_Test/data/database/ORL_Faces/" };
	const std::string image_name{ "1.pgm" };

	std::vector<cv::Mat> images;
	for (int i = 1; i <= 15; ++i) {
		std::string name = image_path + "s" + std::to_string(i) + "/" + image_name;
		cv::Mat mat = cv::imread(name, 0);
		if (!mat.data) {
			fprintf(stderr, "read image fail: %s\n", name.c_str());
			return -1;
		}

		images.emplace_back(mat);
	}

	cv::Mat data(images.size(), images[0].rows * images[0].cols, CV_32FC1);
	for (int i = 0; i < images.size(); ++i) {
		cv::Mat image_row = images[i].clone().reshape(1, 1);
		cv::Mat row_i = data.row(i);
		image_row.convertTo(row_i, CV_32F);
	}

	cv::PCA pca(data, cv::Mat(), cv::PCA::DATA_AS_ROW, 0.95f);

	std::vector<cv::Mat> result(images.size());
	for (int i = 0; i < images.size(); ++i) {
		// Demonstration of the effect of retainedVariance on the first image
		cv::Mat point = pca.project(data.row(i)); // project into the eigenspace, thus the image becomes a "point"
		cv::Mat reconstruction = pca.backProject(point); // re-create the image from the "point"
		reconstruction = reconstruction.reshape(images[i].channels(), images[i].rows); // reshape from a row vector into image shape
		cv::normalize(reconstruction, reconstruction, 0, 255, cv::NORM_MINMAX, CV_8UC1);
		reconstruction.copyTo(result[i]);
	}
	save_images(result, "E:/GitCode/NN_Test/data/pca_result_.jpg", 5);

	// save file
	const std::string save_file{ "E:/GitCode/NN_Test/data/pca.xml" }; // .xml, .yaml, .jsons
	cv::FileStorage fs(save_file, cv::FileStorage::WRITE);
	pca.write(fs);
	fs.release();

	// read file
	const std::string& read_file = save_file;
	cv::FileStorage fs2(read_file, cv::FileStorage::READ);
	cv::PCA pca2;
	pca2.read(fs2.root());
	fs2.release();

	return 0;
}

        结果图像如下:



GitHub:  https://github.com/fengbingchun/NN_Test 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV3.3中主成分分析(Principal Components Analysis, PCA)接口简介及使用 的相关文章

  • ECC 导致多光谱图像的图像对齐失败

    我正在尝试将 RGB 图像与 IR 图像 单通道 对齐 目标是创建 4 通道图像 R G B IR 为了做到这一点 我正在使用cv2 findTransformECC如中所述这个非常简洁的指南 https learnopencv com i
  • 从一个 Mat 复制到另一个 Mat 仅接近黑色像素

    I have Mat difference其中有一些黑色像素 或者几乎是黑色像素 gt 如果发生地震 建筑物会移动等 并且Mat current它由具有自然色彩的真实图像组成 我想替换中的像素Mat current这些黑色像素Mat dif
  • 在 python + openCV 中使用网络摄像头的问题

    我正在使用以下代码使用 openCV python 访问我的网络摄像头 import cv cv NamedWindow webcam feed cv CV WINDOW AUTOSIZE cam cv CaptureFromCAM 1 然
  • 使用 K 均值聚类 OpenCV 进行交通标志分割

    I used K Means Clustering to perform segmentation on this traffic sign as shown below 这些是我的代码 读取图像并模糊 img cv imread 000
  • 从视频/图像中提取元数据

    我从 IP 摄像机获取 MJPEG 流 我正在查看该流并将其保存在计算机上 可以找到我的操作代码here https stackoverflow com questions 21702477 how to parse mjpeg http
  • Pyinstaller“无法执行脚本 pyi_rth_pkgres”并且缺少软件包

    这是我第一次在这里发布问题 因为我的大部分问题已经被其他人回答了 我正在 python 中开发 GUI 应用程序 并尝试使用 pyinstaller 将其打包到单个文件夹和 exe 中 以便于移植 目前 我使用 Windows 10 和 a
  • OpenCV:使用 StereoCamera 系统对颜色标记进行 3D 姿态估计

    我有一个立体摄像系统并使用两者正确校准它 cv calibrateCamera and cv stereoCalibrate My reprojection error似乎没问题 凸轮0 0 401427 凸轮1 0 388200 立体声
  • 如何将图像从 np.uint16 转换为 np.uint8?

    我正在创建一个图像 image np empty shape height width 1 dtype np uint16 之后我将图像转换为 BGR 模型 image cv2 cvtColor image cv2 COLOR GRAY2B
  • OpenCV 完美识别物体

    我有一个应用程序 我想一次跟踪 2 个在图片中相当小的对象 该应用程序应该在 Android 和 iPhone 上运行 因此算法应该是高效的 对于我的客户来说 如果我们提供一些模式以及附加到要跟踪的对象的软件 以获得易于识别的目标 那就完全
  • 在 Android 中使用 OpenCV 查找图像匹配

    我正在尝试构建一个 Android 应用程序 该应用程序可以比较设备相机拍摄的照片 以在一组图像中找到匹配项 我已经在 Android Studio 上配置了 OpenCV 但仅此而已 有人可以通过链接到资源或建议教程来提供帮助吗 Open
  • 使用 OpenCV VideoWriter 将 RTSP 流存储为视频文件

    我正在使用 OpenCV 开发一个 Python 模块 该模块连接到 RTSP 流以对视频执行一些预处理 主要是降低 fps 和分辨率 然后将其存储在文件系统中 但是 即使在尝试了几种编解码器 寻找类似的开发之后 我总是得到一个空的视频 我
  • 基本的 Python OpenCV 裁剪和调整大小

    有人可以帮我一些裁剪算法吗 它的 openCV 我想弄清楚这一点 我知道方法是crop image y y1 x x1 如果我有一个带有 new dimensionXxnew dimensionY 像素的图像 并且我想将其裁剪为相同的宽度
  • 如何在 OpenCV 中将 Float Mat 写入文件

    我有一个矩阵 Mat B 480 640 CV 32FC1 包含浮点值 我想将此矩阵写入一个可以打开的文件Notepad https en wikipedia org wiki Windows Notepad or 微软Word https
  • OpenCV Python RTSP 流

    我想使用 RTSP 从 IP 摄像机流式传输视频 但我有一个问题 我已经安装了先决条件 而且我的 RTSP 链接可以在 VlC 播放器上运行 但是当我在编辑器中尝试并运行它时 它说找不到相机 这是我的代码 import cv2 import
  • 如何确定透视变换后的点在新图像平面中的位置?

    我使用 OpenCV Python Numpy 图像中有三个点 我知道这些点的确切位置 P1 P2 N1 我要将图像转换为另一个视图 例如 我将透视图转换为侧视图 如果这样做 我将无法获得图像平面中这三个点的确切位置 我应该以一种可以获得这
  • 如何将 OpenCV 的测试框架与 CMake 结合使用?

    好像 OpenCV 有一个测试框架 https github com Itseez opencv tree ef91d7e8830c36785f0b6fdbf2045da48413dd76 modules ts include opencv
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数
  • OpenCv 与 Android studio 1.3+ 使用新的 gradle - 未定义的参考

    我在使用原生 OpenCv 2 4 11 3 0 0 也可以 和 Android Studio 1 3 以及新的 ndk 支持时遇到问题 所有关于 mk 文件的教程 但我想将它与新的实验性 gradle 一起使用 使用 Kiran 答案An
  • Python 2.7从非默认目录打开多个文件(对于opencv)

    我在 64 位 win7 上使用 python 2 7 并拥有 opencv 2 4 x 当我写 cv2 imread pic 时 它会在我的默认 python 路径中打开 pic 即C Users Myname 但是我如何设法浏览不同的目

随机推荐

  • 利用unity的MenuItem给自己的编辑器增加一点定制选项

    MenuItem是unity自带的特性 利用它我们可以方便的在编辑器里面加加入一些功能 以下是一些常用功能的总结 注意 需要把文件放在Assets下的Editor文件夹下 using UnityEngine using UnityEdito
  • VUE 之普通表格过滤器封装(前端实现表格实时搜索),无分页情况下

    需求 无分页表格不请求接口进行过滤筛选 封装过滤方法 过滤器 param searchParam 需要筛选的参数 data中定义 根据项目需求进行处理 param tableData 存放接口初始化数据包 data中定义 根据项目需求进行处
  • 缺少streams.h的解决方法和DirectShow开发环境的搭建(转)

    这几天在学DirectShow的开发 一个streams h头文件折腾了一整天才搞定 简单总结一下出现缺少streams h的解决方法和DirectShow开发环境的搭建 开发包方面 我用的是VC2005 Windows Server 20
  • DHCP的工作原理

    DHCP是一种网络管理协议 全称为动态主机配置协议 Dynamic Host Configuration Protocol 它是一种基于TCP IP协议的网络服务 允许网络管理员集中管理和分配IP地址和其他网络配置参数 以便客户端设备能够使
  • 区块链是什么?

    人工智能时代 一本书读懂区块链金融 互联网 时代企业管理实战系列 马兆林 区块链2 0 谭磊 区块链原理 设计与应用 区块链技术丛书 杨保华 陈昌 区块链将如何重新定义世界 唐文剑 区块链技术指南 邹均 区块链社会 解码区块链全球应用与投资
  • 6个例子让你彻底明白,什么是纳什均衡

    6 个例子让你彻底明白 什么是纳什均衡 电影 美丽心灵 的主人公原型 约翰 纳什因车祸去世 你也许听说过他是厉害的数学家 1994 年诺贝尔经济学奖得主 博弈论之父 但是 他的最大贡献是 纳什均衡 那么问题来了 纳什均衡到底是个什么鬼 我们
  • java--面向对象----->图书管理系统

    一 写主类 public class Message 属性 private String name private int state private int date private int count 构造器 public Messag
  • Python数模笔记-StatsModels 统计回归(4)可视化

    人工智能学习离不开实践的验证 推荐大家可以多在FlyAI AI竞赛服务平台多参加训练和竞赛 以此来提升自己的能力 FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台 每周免费提供项目开源算法样例 支持算法能力变现以及快
  • linux多服务器之间的目录文件同步

    linux多服务器之间的目录文件同步 1 先在每台服务器上安装rsync yum install rsync 2 每台机器启动rsync服务 systemctl start rsyncd service systemctl enable r
  • 深入Java微服务之网关系列3: SpringCloudalibaba gateway详解(史上最全)

    九 服务网关 Gateway 9 1 网关简介 大家都都知道在微服务架构中 一个系统会被拆分为很多个微服务 那么作为客户端要如何去调用这么多的微服务呢 如果没有网关的存在 我们只能在客户端记录每个微服务的地址 然后分别去调用 这样的架构会存
  • SQL优化实战:如何通过缓存给MySQL查询进行流量削峰?

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 前 言 经过前面索引和sql的优化后 现在查询速度快的飞起 然后 我们继续回归到了日常需求的开发中 3个月过后 订单表的数据已经达到5000万了 不过sql一次查询的
  • Shiro学习笔记。

    授权需要继承 AuthorizingRealm 类 并实现其 doGetAuthorizationInfo 方法 AuthorizingRealm 类继承自 AuthenticatingRealm 但没有实现 AuthenticatingR
  • android opengl旋转,OpenGL纹理旋转及翻转问题详解

    大家好 我是程序员kenney 今天给大家讲解一下Android上OpenGL开发可能会遇到的一些纹理旋转及翻转的问题 其中有些原理在其它平台上如ios osx上也是类似的 纹理旋转的问题一定要搞清楚 不能每当碰到一个方向不对的就自己旋转一
  • vue+ElementUI页面模板

    一 在普通HTML项目中引入elementUI vue elementUI的HTML页面模板 可以直接套用 引入 vue CDN 引入elementUI CDN 官方文档地址 https element faas ele me zh CN
  • Visual Studio 编译C++时出现 error RC2144: PRIMARY LANGUAGE ID not a number

    最近在用VS编译Qt项目时 为rc资源文件添加了版本信息后就编译不通过了 编译输出提示错误 error RC2144 PRIMARY LANGUAGE ID not a number 在网上搜索后发现大多数的解决方法是在rc文件中添加如下一
  • windows hosts文件恢复

    解决方法 重新创建hosts文件 在路径C Windows System32 drivers etc中查找 注意 记住hosts文件没有后缀 之前我一直存储为文本导致无法正常使用
  • 减少域名DNS解析时间将网页加载速度提升新层次-DNS缓存/预读取/拆分域名

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 我们知道在用户访问网站时先得经过域名DNS解析这一过程 可能很多人对于DNS解析时间平常并没有太在意 性能稳定 响应时间快的DNS域名解析服务与不稳定 响应过慢的DNS的域
  • vue中使用(瀑布流)vue-waterfall-easy插件

    参考文档 效果图如下 1 安装 npm install vue waterfall easy save dev 2 引入 import vueWaterfallEasy from vue waterfall easy export defa
  • Nacos配置中心原理(一)客户端部分

    基本概念 配置服务 在服务或者应用运行过程中 提供动态配置或者元数据以及配置管理的服务提供者 配置项 个具体的可配置的参数与其值域 通常以 param key param value 的形式存在 例如我们常 配置系统的日志输出级别 logL
  • OpenCV3.3中主成分分析(Principal Components Analysis, PCA)接口简介及使用

    OpenCV3 3中给出了主成分分析 Principal Components Analysis PCA 的实现 即cv PCA类 类的声明在include opencv2 core hpp文件中 实现在modules core src p