Opencv 实验系列之Mat

vivado hls 使用mat的流数据完成滤波操作 hls进行滤波操作的难点和注意点: 1、由于vivado hls中的mat类型,实际上为stream类型,只可以顺序存取,不可以随机存取,因此无法随便怼同一个数据进行复用。 2、同时由于FPGA资源有限,无法将图片的像素值全部存储下来,采用line存储的方式进行存储,方便进行数据的复用。 解决代码: 本文主要提供mat类型的数据通过何种的存储方式,进行滤波的代码,以及方法. 文件位于(D:\vivado2018.3\project\2_guassianblur\fiter2d) to.. 阅读详情

Opencv 实验系列之Mat的初步理解

Mat的组成

Mat is basically a class with two data parts: the matrix header (containing information such as the size of the matrix, the method used for storing, at which address is the matrix stored, and so on) and a pointer to the matrix containing the pixel values (taking any dimensionality depending on the method chosen for storing) . The matrix header size is constant, however the size of the matrix itself may vary from image to image and usually is larger by orders of magnitude.

Mat主要由两部分组成第一部分称为矩阵头,其包含了有关于矩阵的信息和方法例如大小,储存地址,读取图片的函数等,剩余一部分为指向图像相素值储存区的指针。每个Mat变量的矩阵头部分都是独立的私有的,但储存指针可能是相同的,既两个不同的Mat变量可能指向同一矩阵数据。在进行如下操作时,其实A,B,C,D,E共用同一个储存区域,对其中任意一个变量进行更改都会影响其余变量的储存值。

Mat A, C;                          // creates just the header parts
A = imread(argv[1], IMREAD_COLOR); // here we'll know the method used (allocate matrix)
Mat B(A);                                 // Use the copy constructor
C = A;                                    // Assignment operator
Mat D (A, Rect(10, 10, 100, 100) ); // using a rectangle
Mat E = A(Range::all(), Range(1,3)); // using row and column boundaries

如果需要对矩阵数据进行真正的备份,则需要调用clone()或copyTo()在下面的例子中A,F,G有各自的储存区域,而非共享存储区域。

Mat F = A.clone();
Mat G;
A.copyTo(G);

Mat的储存图片的方式

RGB is the most common as our eyes use something similar, however keep in mind that OpenCV standard display system composes colors using the BGR color space (a switch of the red and blue channel).
The HSV and HLS decompose colors into their hue, saturation and value/luminance components, which is a more natural way for us to describe colors. You might, for example, dismiss the last component, making your algorithm less sensible to the light conditions of the input image.
YCrCb is used by the popular JPEG image format.
CIE L*a*b* is a perceptually uniform color space, which comes handy if you need to measure the distance of a given color to another color.

1)灰度图
2)BGR图(注意在opencv中,蓝红两通道被颠倒了)
3)HSV和HLS,使用该方法可降低算法对光照条件的敏感度(以下关于HSV HLS的解释摘自知乎)

HSB 和 HSV 是是一样的,只是叫法不同,HSL 则还有一些细微的区别:在所有的情况下,H(Hue) 代表色相,S(Saturation) 代表饱和度。Hue(色相)是指取值范围在0-360°的圆心角,每个角度可以代表一种颜色。B 在 HSB 模式中是 Brightness 的意思, V 在 HSV 中是值,但是所表述的是一个东西:对光的量或光源的功率的感知。色相和明度(值)可以在0 - 1或者0% - 100%间取值。HSL 稍微有一些不同,Hue(色相)和 HSB/HSV 模式中一样用数值表示,但是, S,同样代表“饱和度”,定义不一样,且需要转换。 L 代表亮度,和 Brightness/Value 不一样,Brightness(明度)是被认为是”光的量“,可以是任何颜色。而 Lightness(亮度)是作为”白的量“来理解的。Saturation(饱和度)不一样,因为在两个模型中,饱和度都按比例缩放以适应明度或亮度的定义。
作者:知乎用户
链接:https://www.zhihu.com/question/22077462/answer/29483467

4)YCrCb既YUV,其与RGB转换方式为

Y = (B * 1868 + G * 9617 + R * 4899 + 8192)/16384;
U = ((B - Y)* 9241 + 8192)/16384 + 128;
V = ((R - Y)*11682 + 8192)/16384 + 128;
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U

5)CIE(略)

Opencv系列(二):Mat类的定义及输出 Opencv系列(二):Mat类及其操作 一、数字图像 什么是数字图像? 数字图像是物理图像(客观世界中,以自然形式呈现出的图像,也叫做连续图像)的连续信号值被离散化后,以像素为单元组成的二维矩阵,每个像素通过离散的数值进行表征 (如图)。 数字图像三要素: (1)图像大小:图像的长(length)和宽(width),即图像在长度和宽度方向上的像素个数; (2)图像通道数:可以理解位表征一个像素... 阅读详情

相关推荐

OpenCV Mat基础认知感

OpenCV是一个开源的供开发的计算机视觉处理库,涵盖的内容包括图像处理,机器学习。由c到c++ ,再到各平台的跨平台框架。 Mat - 图像容器 Mat类用于表示一个多维的单通道或者多通道的稠密数组。能够用来保存实数或复数的向量、矩阵,灰度或彩色图像,立体元素,点云,张量以及直方图(高维的直方图使用SparseMat保存比较好)。简言之,Mat就是用来保存多维的矩阵的。 在接口层面上,Mat是OpenCV进行图像处理的基本结构定义。可以简单的理解为就是一个图片抽象类,但它不只表示图像、还能表示立体、矩阵。

主要记录一些问题处理记录,部分是作为知识库使用 7252

HLS——opencv图像处理知识点

https://blog.youkuaiyun.com/weixin_43387329/article/details/90346088 1、opencv创建一个跟原图等大小的矩形 mat类型,创建等大小矩形 Mat src1 = imread("lena.jpg", 1); Mat dst_mat; dst_mat.create(src1.size(), src1.type()); iplimage类型,创建等大小 IplImage* src = cvLoadImage(INPUT_IMAGE); Ip

weixin_50988214的博客 3205

opencv中的Mat详解

Mat详解 1.初始化 Mat-the basic image container 最最基本的函数,所有图片在opencv中都是用mat形式来操作的。 //初始化一个Mat Mat A,C; A = imread(argv[1],IMREAD_COLOR); Mat B(A); //复制A给B C = A; //赋值运算 Mat D(A,Rect(10,10,100,100)); //使用一个矩形 Mat E = A(Range::all(), Range(1,3)); //使

aazqy1234的博客 1029

FPGA 图像处理 HLS

灰度变换 rgb2gray.h rgb2gray.cpp test_rgb2gray.cpp C仿真 sobel边缘检测 sobel.h sobel.cpp test_sobel.cpp C仿真

weixin_43167279的博客 684

Ubuntu 20.04 上 Geant4 安装避坑全记录:从源码编译到 B1 示例跑通(含数据包加速下载)

本文详细记录了在Ubuntu 20.04系统上从源码编译安装Geant4的全过程,包括环境准备、依赖安装、CMake参数解析、多线程编译优化以及数据包加速下载等关键步骤。特别针对B1示例的测试与验证提供了完整流程,帮助科研人员和学生避开常见安装陷阱,提升粒子物理模拟效率。

weixin_31220401的博客 312

stackelberg博弈_博弈论、多智能体、强化学习(随便记点东西)

多智能体应用场景:已实现:游戏AI。正在努力:UAV,物资运输,快递分发,交通系统。未来:社会学,预测群体行为,城市区域合作,国际关系。博弈论基本定义:玩家集合: 策略集合: 收益函数: 囚徒困境:两智能体矩阵博弈坦白抵赖坦白1,13,0抵赖0,32,2占优策略与最佳应对:上表中两者均具有占优策略,即无论如何都应该选坦白。那么构造下表。坦白抵赖坦白1,13,0抵赖0,12,2对于玩家一来说,坦白...

weixin_39611722的博客 2998

VIVADO HLS学习

VIVADO HLS数据类型使用记录

三岁囍的博客 3836

COMSOL模拟CO2驱替CH4:多物理场耦合建模与工程应用详解

在非常规天然气开发与碳封存工程中,多孔介质内的渗流、吸附与岩石变形相互耦合,使得CO2驱替CH4的产能预测和CO2封存评估无法仅靠经验公式完成。以达西定律描述裂隙流动、以扩展Langmuir方程刻画竞争吸附、用应力-吸附-渗透率关系关联煤岩变形,是多物理场耦合数值模拟的核心路径。COMSOL Multiphysics凭借内置渗流、固体力学与组分传递接口,能够将这些机制整合为可参数化扫描的仿真模型,为注气压力、井距、渗透率演化等方案设计提供量化依据。围绕CO2驱替CH4模拟的建模流程、参数取法与结果判读,可形

weixin_29574585的博客 162

HLS第三十五课(XAPP1167,基于videolib实现图像处理)

XAPP1167几个例子,是基于videolib实现图像处理的。

Huskar_Liu的博客 1794

AlphaFold3实战:用它预测抗体结构,我的CDR H3环RMSD降到了2Å以内

本文详细介绍了如何利用AlphaFold3(AF3)高精度预测抗体结构,特别是CDR H3环的建模,其RMSD可降至2Å以内。通过实战演示从序列输入到结构优化的全流程,包括参数配置、置信度指标解读及结果分析,帮助研究人员快速掌握AF3在抗体药物研发中的应用。

weixin_29224529的博客 187

从零实现机械臂抓取仿真:用MoveIt+Gazebo完成物体pick&place全流程

本文详细介绍了如何使用ROS的MoveIt框架与Gazebo仿真环境,从零构建机械臂抓取仿真系统。涵盖环境搭建、MoveIt配置、Gazebo集成、抓取动作实现等全流程,帮助开发者掌握机械臂控制的核心技术,实现高效的pick&place任务。

weixin_29250403的博客 477

OpenCV基础课程笔记04Mat常用方法

代码 #include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat src = imread("A:专用\\TestForTheCV\\class4酷酷.jpg"); if (src.empty()) { cout << "No file!" << endl; } else { imshow("

爱和九九的博客 205

【win11 cuda12.0安装tensorflow-gpu】

win11 cuda 12.0 安装 tensorflow-gpu

weixin_36299320的博客 3010

opencv中mat详细解析

1、起源 OpenCV作为强大的计算机视觉开源库,很大程度上参考了MatLab的实现细节和风格,比如说,在OpenCV2.x 版本以后,越来越多的函数实现了MatLab具有的功能,甚至干脆连函数名都一模一样(如 imread, imshow,imwriter等)。这一做法,不仅拉近了产品开发与学术研究的距离,并极大程度的提高了开发人员的研发效率,不得不说,Intel公司真的是一个伟大的公司。 ...

callback的专栏 5万+

Python爬虫实战:利用Selenium与反反爬技术高效爬取企查查工商信息

本文将详细介绍如何使用Python最新爬虫技术(包括Selenium、Playwright、智能代理池等)爬取企查查工商信息数据。文章包含完整的代码实现、反反爬策略、数据解析与存储方案,以及法律合规性讨论,共计约8000字。企查查作为国内领先的企业信息查询平台,收录了超过2亿家企业的工商信息、司法信息、知识产权等数据。这些数据对于市场分析、商业决策等具有重要价值。法律边界提示禁止大规模爬取导致服务器过载不得绕过付费接口获取数据数据使用需遵守《个人信息保护法》商业用途需获得授权。

2201_76125261的博客 2237

Altium Designer(AD)PCB拼版——两种方法教程

本文详细介绍了PCB拼版的设计要点与操作方法。主要内容包括:拼版目的(解决小尺寸夹持问题、提高利用率、降低成本)和三大连接方式(V-CUT、邮票孔、空心连接条)的特点与参数设置;工艺边设计规范(宽度、定位孔、Mark点等要求);拼版尺寸限制与常见错误检查;以及两种具体拼版操作方法(特殊粘贴和拼版阵列),并附有工艺边、定位孔、Mark点的绘制步骤示意图。同时提供了硬件工程师笔试面试相关资源链接。全文系统阐述了PCB拼版的核心技术和操作流程,为电子设计人员提供了实用指导。

XU157303764的博客 7603

OpenCV——探究Mat何时为空&&初始化Mat

文章目录探究Mat何时为空初始化Mat 探究Mat何时为空 int main() { Mat a; cout << "Mat a: " << endl; if (a.empty()) { cout << " a is null" << endl; } else { cout << " a is not null" << endl; for (size_t i = 0; i < 10; i++)

WaitFoF 6012

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

opencv Mat遍历速度实验

初次上手opencv,简单遍历mat(CV_8UC3,约1000*3000像素),结果耗时约300ms。这个速度,不能忍!!!百度下,大致结论:data访问  &gt; ptr访问 &gt; at访问。我就是ptr&lt;vec3b&gt;访问,按理不能这么慢啊,不得解。于是,索性试验下,实践出真知嘛。实验环境及参数:vs2017,opencv-3.4.1,Mat(CV_8UC3)2组宽高:100...

fanghtao的专栏 2876

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

opencv Mat详解

OpenCV Mat操作详解

qq_30150579的博客 6897

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

openCV系列之Mat和Vector类型直接的转换

来源:https://blog.youkuaiyun.com/guyuealian/article/details/80253066 #include <opencv2/opencv.hpp> using namespace cv; using namespace std; /***************** Mat转vector **********************/ template<typename _Tp> vector<_Tp> convertMat

li4692625的博客 4657

OPENCV重点结构体Mat的讲解

在OPENCV中,Mat是整个图像存储的核心也是所有图像处理的最基础的类。Mat主要存储图像的矩阵类型,包括向量、矩阵、灰度或者彩色图像等等。Mat的对象可以分成矩阵头和矩阵数据两个大部分,矩阵头是存储图像的长度、宽度、色彩信息等头部信息;矩阵数据则是存储具体的图像数据。若开发者想对OPENCV的Mat中的信息进行修改,则是改变像素信息的数据部分。Mat的输出一般包含图像的宽度、高度、通道数量、通道深度、字节类。

2202_75840803的博客 1654

mat 释放_OpenCV中Mat总结

一、数字图像存储概述数字图像存储时,我们存储的是图像每个像素点的数值,对应的是一个数字矩阵。二、Mat的存储1、OpenCV1基于C接口定义的图像存储格式IplImage*,直接暴露内存,如果忘记释放内存,就会造成内存泄漏。2、从OpenCV2开始,开始使用Mat类存储图像,具有以下优势:(1)图像的内存分配和释放由Mat类自动管理(2)Mat类由两部分数据组成:矩阵头(包含矩阵尺寸、存储方法、存...

weixin_39664477的博客 3723

opencv的mat赋值_OpenCV Mat 类型定义和赋值

1.一般的Mat定义方法:cv::Mat M(height,width,),例:cv::Mat M(480,640,CV_8UC3); 表示定义了一个480行640列的矩阵,矩阵的每个单元的由三个(C3:3 Channel)8位无符号整形(U Unsigned U8 8位)构成。2.将已有数组赋给Mat矩阵的方法:cv::Mat M = cv::Mat(height,width,,data),例:...

weixin_39607873的博客 9122

opencv中Mat究竟是什么?

opencv中Mat究竟是什么?(试着运行一下两个代码) 首先看opencv是怎么显示一张图的 : //#include "stdafx.h" #include <opencv2/opencv.hpp> #include <iostream> #include <string> using namespace cv; using namespace ...

weixin_42800007的博客 4803

【Opencv】Opencv中的Mat类介绍

Opencv中的Mat类介绍 1. Mat类简介 Mat类是Opencv中储存图像非常常见的一种数据结构。Mat类可以看做是存放矩阵的容器,他包含了两部分,分别是用来存放图片信息的信息头,和一个指向图片储存矩阵的指针。信息头往往占用空间比较小,而且各个图片之间的信息头是完全独立的。而图片储存矩阵往往占用较大的空间,并且可以多个图片的矩阵指针指向同一个内存空间。 2. Mat类的拷贝 从Mat类的数...

qq_41741344的博客 2136

Opencv Mat的三种常用类型简介

本文主要介绍Opencv常用的三种Mat类型:Mat,Mat_,Matx。

yhl_leo 1万+
下一篇: OpenCV实验系列之查表函数LUT()的使用
Nrush
博客等级 码龄11年 55粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值