OpenCV学习—03:Mat对象

2023-05-16

 Mat对象与IplImage对象

  • Mat对象是OpenCV2.0之后引进的数据结构,自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构
  • IplImage是从2001年OpenCV发布之后就一直存在的,是C语言风格的数据结构,需要开发人员自己分配与管理内存,对大的程序使用它容易导致内存泄漏的问题。

=================

Mat对象的构造函数与常用方法

构造函数:

  • Mat()
  • Mat(int rows,int cols,int type)
  • Mat(Size size,int type)
  • Mat(int rows,int cols,int type,const Scalar &s)
  • Mat(Size size,int type,const Scalar &s)
  • Mat(int ndims,const int *sizes,int type)
  • Mat(int ndims,const int *sizes,int type,const Scalar &s)

常用方法: 

  1.         void copyTo(Mat mat)                     //  Mat A, B;    A.copyTo(B);
  2.         void convertTo(Mat dst, int type)
  3.         Mat clone()                                     // Mat A ;      Mat B = A.clone();
  4.         int channels()
  5.         int depth()
  6.         bool empty();   是否为空                // if(srcImg.empty())  return -1;         
  7.        uchar* ptr(i=0)

                    eg:  const uchar *first = img.ptr<uchar>(0);
                           printf("value: %d",*first);


代码实例:

	Mat dst;
	dst = Mat(src.size(), src.type());//创建大小为size 类型为type的图像

	// Scalar(127, 225, 255)是对矩阵进行初始化赋值,
	// 颜色为 RGB(127, 225, 255),大小、类型与原图像相同
	dst = Scalar(127, 225, 255);

	namedWindow("output1", CV_WINDOW_AUTOSIZE);
	imshow("output1", dst);

效果图:生成一张什么都没有的图像,颜色是RGB(127, 0, 255),大小、类型与原图像相同 

综合实例:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
	Mat src;
	src = imread("test.jpg");

	if (src.empty())//如果数组没有元素 则返回true
	{
		cout << "could not load image..." << endl;
		return -1;
	}

	namedWindow("inputImg", CV_WINDOW_AUTOSIZE);
	imshow("inputIMg", src);

	Mat dst;
	dst = Mat(src.size(), src.type());//创建大小为size 类型为type的图像

	// Scalar(127, 225, 255)是对矩阵进行初始化赋值,
	// 颜色为 RGB(127, 225, 255),大小、类型与原图像相同
	dst = Scalar(127, 225, 255);
	namedWindow("output1", CV_WINDOW_AUTOSIZE);
	imshow("output1", dst);

	Mat dst1;
	src.copyTo(dst1);//把矩阵复制到另一个矩阵中

	// OpenCV中image.copyTo()有两种形式:
	//	1、image.copyTo(imageROI),作用是把image的内容粘贴到imageROI;
	//	2、image.copyTo(imageROI,mask), 作用是把mask和image重叠以后把mask中像素值为0(black)的点对应的image中的点变为透明,而保留其他点。
	namedWindow("copyTo_output", CV_WINDOW_AUTOSIZE);
	imshow("copyTo_output", dst1);

	//Mat.ptr<uchar>(row):获取第row行的图像像素指针。图像的行数从0开始计数
	const uchar *firstRow = dst.ptr<uchar>(0);
	printf("value : %d\n", *firstRow);

	//OpenCV提高了函数filter2D来实现掩膜操作
	Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);  // 创建核
	filter2D(src, dst, src.depth(), kernel);

	//输出 掩膜操作后的图像
	namedWindow("掩膜操作后的图像", CV_WINDOW_AUTOSIZE);
	imshow("掩膜操作后的图像", dst);


	Mat m2 = Mat::eye(2, 2, CV_8UC1);
	cout << "m2 =" << endl << m2 << endl;
	namedWindow("output", CV_WINDOW_AUTOSIZE);
	imshow("output", m2);

	waitKey(0);

	return 0;
}

运行结果:





 

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

OpenCV学习—03:Mat对象 的相关文章

  • 在python中使用tesseract 3.02的C API与ctypes和cv2

    我正在尝试在 python 中将 Tesseract 3 02 与 ctypes 和 cv2 一起使用 Tesseract 提供了一组公开的 DLL C 风格 API 其中之一如下 TESS API void TESS CALL TessB
  • 使用python opencv从zip加载图像

    我能够成功地从 zip 加载图像 with zipfile ZipFile test zip r as zfile data zfile read test jpg how to open this using imread or imde
  • 从霍夫线中选择线

    I m using Hough Lines to do corner detection for this image i plan to find the intersection of the lines as the corner T
  • 如何在 OpenCV 中更好地计算射线线段交点?并得到它的交点和距原点的距离?

    我有 4 条线段 A B C 和 D 每条线都表示为两个点 例如 线A由点A1和点A2表示 我想要的是 点 X 即线 A 射线与线 B 相交的点 X与A1 原点 之间的距离 测试相交时 线 A 射线不应 与线段 D 相交 与线段C相交 我该
  • 水平计数加工织物中的白色簇

    我对织物材质进行了处理 得到如下图所示的图像 原图 处理后的图像 现在 我想找到连续的白色簇的数量 如果所有簇都是均匀且完全水平的 我将运行一个循环来计算强度的上升和下降 以找到簇的数量 但事实并非如此 如果我通过上述方法取几行的中值 平均
  • 使用高斯混合模型进行皮肤检测

    我正在根据以下进行皮肤检测算法本文 http www cc gatech edu rehg Papers SkinDetect IJCV lowres pdf 第 21 页有两个模型 高斯皮肤混合模型和非皮肤颜色模型 第一个皮肤检测模型效果
  • 尝试捕获默认 iSight 相机时 OpenCV 崩溃

    我正在尝试让 openCV 在我的 Macbook Pro 10 8 5 视网膜型号 上运行 并且我想使用默认的 iSight 摄像头进行输入 因为如果我不这样做 我不想随身携带或购买 USB 摄像头不需要 我正在使用 OpenCV 用户文
  • 增加图像亮度而不溢出

    我在尝试增加图像亮度时遇到问题 这是原始图像 我想要得到的图像是这样的 现在使用以下代码增加亮度 image cv2 imread home wni vbshare tmp a4 index2 png 0 if sum image 0 le
  • 在opencv中发现凸性缺陷? [根据给定的输入图像崩溃..]

    我有一个计算图像凸包的程序 我正在尝试使用此信息来计算fingers存在于输入图像中 从一些冲浪中我发现做到这一点的方法 数手指 是 寻找轮廓 凸包 凸性缺陷 但我在使用凸性缺陷函数时遇到了麻烦 它编译得很好 但在运行时程序会因某些输入图像
  • 屏幕截图中低分辨率文本的 OCR

    我正在编写一个 OCR 应用程序来从屏幕截图图像中读取字符 目前 我只关注数字 我的方法部分基于这篇博文 http blog damiles com 2008 11 basic ocr in opencv http blog damiles
  • opencv如何使用compareHist函数

    img cv2 imread mandrill png histg cv2 calcHist img 0 None 256 0 256 if len sys argv lt 2 print gt gt sys stderr Usage sy
  • 如何使图像呈现出陈旧、布满灰尘、颜色褪色的外观?

    我有旧画的图像 这些画很旧 布满灰尘 颜色褪色 如图所示here https i stack imgur com xuoEF jpg 如何赋予任何图像这种 旧 外观 我找不到任何过滤器或 openCV 函数来实现这种类型的外观 EDIT 我
  • OpenCV findContours 破坏源图像

    我编写了一个在单通道空白图像中绘制圆形 直线和矩形的代码 之后 我只需找出图像中的轮廓 就可以正确获取所有轮廓 但找到轮廓后 我的源图像变得扭曲 为什么会出现这种情况 任何人都可以帮我解决这个问题 我的代码如下所示 using namesp
  • 使用 openCV 和 python 检测物体

    我正在尝试使用 OpenCV 和 Python 检测下图中的白点 我尝试使用函数 cv2 HoughCircles 但没有成功 我需要使用不同的方法吗 这是我的代码 import cv2 cv import numpy as np impo
  • 如何使用 OpenCV 检测图像帧中的对象?

    我正在使用 Raspberry Pi 开发一个漫游器 它将清扫房间并捡起掉落在地上的物体 为了检测物体 我使用了在流动站操作开始时拍摄的参考图像 以及每 10 秒单击一次的图像 新图像 为了确定图像帧是否发生变化 我在参考图像和新图像之间进
  • 为什么这些双精度数的返回值为-1.#IND?

    I have double score cvMatchContourTrees CT1 CT2 CV CONTOUR TREES MATCH I1 0 0 cout lt
  • opencv createsamples没有错误,但是没有找到样本

    我在用着this http coding robin de 2013 07 22 train your own opencv haar classifier html教程 我正在根据我的正面图像创建大量样本 我正在使用 Windows 这是
  • 相机标定(OpenCV 2.3)-如何使用畸变参数?

    我有一组带有一些附加标记的刚体图像 我在这些标记之一中定义了一个原点坐标系 我想获得该坐标系与在相机原点定义的坐标系之间的旋转和平移 我尝试了一段时间 POSIT 以下this http goo gl cUYYt 但从未获得可接受的结果 直
  • 如何在给定目标大小的情况下在 python 中调整图像大小,同时保留纵横比?

    首先 我觉得这是一个愚蠢的问题 对此感到抱歉 目前 我发现计算最佳缩放因子 目标像素数的最佳宽度和高度 同时保留纵横比 的最准确方法是迭代并选择最佳缩放因子 但是必须有更好的方法来做到这一点 一个例子 import cv2 numpy as
  • 如何使用 Python 将我的 GoPro Hero 4 相机直播连接到 openCV?

    我在尝试从我的新 GoPro Hero 4 相机捕获实时流并使用 openCV 对其进行一些图像处理时遇到麻烦 这是我的试用 创建的窗口上没有显示任何内容 import cv2 import argparse import time imp

随机推荐

  • 深度学习实现工业零件的缺陷检测

    介绍 工业零件在制造完成的时候 xff0c 往往需要去检测其完整性和功能性 如下图所示 xff0c 从左上到右下 xff0c 分别是擦花 漏底 碰凹 凸粉 本篇博文主要讲解如何去识别这四类图像 xff0c 所用框架为keras 2 1 6
  • 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大

    题目描述 给定一个无序数组 xff0c 包含正数 负数和0 xff0c 要求从中找出3个数的乘积 xff0c 使得乘积最大 xff0c 要求时间复杂度 xff1a O n xff0c 空间复杂度 xff1a O 1 输入描述 无序整数数组A
  • 使用国内源来安装pytorch(速度很快)

    一 找到合适的安装方式 pytorch官网 xff1a https pytorch org 二 安装命令 pip3 install torch torchvision i https pypi mirrors ustc edu cn sim
  • 游戏中的寻路算法--Dijkstra算法和AStar(A*)算法

    前言 如今游戏中最最常用的两种寻路算法为Dijkstra算法和A 算法 xff0c 虽然现代引擎中的Al寻路算法看似很复杂 其实大部分是Dijkstra算法或者A 算法的变种 导航网格 图数据 无论是2D游戏的导航网格或者3D游戏导航网格
  • 【ROS】功能包创建

    本文记录创建ROS功能包的过程 xff0c 但是在创建功能包之前需要先创建ROS工作空间 xff0c 如果不知道如何创建工作空间可以参看链接 创建过程 1 打开终端 xff0c 进入自己的工作空间的src目录 xff0c 输入以下命令 xf
  • Vue实现进度条

    本篇文章用Vue简单实现进度条的变化 先上一波效果图 xff1a 点击减后 xff0c 每次减百分之十 减到百分之0后 xff0c 减操作按钮隐藏 然后点击重头开始 xff0c 恢复到初始状态 二话不说 xff0c 上代码 lt DOCTY
  • C++中vector容器的使用方式和函数调用

    include lt vector gt vector是一种顺序容器 xff0c 和数组差不多但是比数组更优越 xff0c 数组不支持动态扩展但vector容器支持动态拓展因此vector不存在浪费内存 和越界的问题 xff0c 随机访问比
  • Jetson tx2(JetPack 4.4)配置pytorch环境

    下载pytorch 下载pytorch1 7 xff1a 我的系统是JetPack4 4 xff0c 要求pytorch gt 61 1 7 安装pytorch span class token function sudo span spa
  • Zynq Cache问题的解决方法

    在进行PS PL之间的DMA传输时 xff0c 不可避免会遇到Cache问题 今天在这里讲一下Cache的解决方法 其中参考了forums xilinx com的处理方法 首先解释为什么DMA会引入Cache问题 xff08 专业名称为Ca
  • Python网络爬虫之-HTTP协议原理

    Python网络爬虫之 HTTP协议原理 1 爬虫之http基本原理2 浏览器解析概述Cookie技术 1 爬虫之http基本原理 URI 统一资源表示符 中包含 URL lt 统一资源定位符 gt URN lt 统一资源名称 gt HTT
  • Java的大端小端字节序

    在计算机中 xff0c 内存地址通常是按照地址递增的方式分配的 xff0c 也就是说 xff0c 低地址是指内存的起始位置 xff0c 高地址是指内存的末尾位置 在大多数体系结构中 xff0c 数据存储在内存中是以字节为单位进行的 例如 x
  • DSP28335 printf重定向问题调试记录

    最近几天在玩DSP28335板子 xff0c 在实现printf重定向功能时 xff0c 遇到很多问题 xff0c 最终结合网上一些人的经验和个人实践 xff0c 最终解决了问题 本文做一个简单的总结 xff0c 以便后续查阅 同时也是希望
  • C++ 绝对路径与相对路径

    对于一些第三方的SDK xff0c 一般会包含头文件 h xff0c 静态库文件 lib 和动态库文件 dll 文件位置 xff1a 为了提高程序的可移植性 xff0c 将第三库放在解决方案 sln 或者工程 vcxproj 文件所在的文件
  • C/C++ 函数与指针取地址符

    int f1 float int f2 char int f3 float int f4 float int pf float 则以下不合法的是 int p float 61 amp f1 pf 61 amp f4 pf 61 amp f2
  • C/C++编程异常处理中try和throw以及catch语句的用法

    这篇文章主要介绍了C 43 43 编程异常处理中try和throw以及catch语句的用法 包括对Catch块的计算方式的介绍 若要在 C 43 43 中实现异常处理 xff0c 你可以使用 try throw 和 catch 表达式 首先
  • c/c++中的string常用函数用法总结

    标准c 43 43 中string类函数介绍 注意不是CString 之所以抛弃char 的字符串而选用C 43 43 标准程序库中的string类 xff0c 是因为他和前者比较起来 xff0c 不必 担心内存是否足够 字符串长度等等 x
  • Convolutional Pose Machines

    本论文将 深度学习 应用于人体姿态分析 xff0c 同时用卷积图层表达纹理信息和空间信息 目前在2016年的 MPII竞赛中名列前茅 作者在github提供了 训练和测试源码 convolutional pose machines CVPR
  • OpenCV学习—01:矩阵的掩膜操作

    一 获取图像的像素指针 CV Assert srcImg depth 61 61 CV 8U Mat ptr lt uchar gt int i 61 0 获取像素矩阵的指针 xff0c 索引i表示第几行 xff0c 从0开始计数 获取当前
  • OpenCV学习—02:记录程序的运行时间

    首先 xff0c 我的电脑配置 xff1a VS2013 43 Opencv3 1 0 43 Win 64bit 有时 xff0c 我们想知道要程序一共运行了多长时间 xff0c 这个很常用 xff0c 也很简单 xff0c 仅仅需要两个函
  • OpenCV学习—03:Mat对象

    Mat对象与IplImage对象 Mat对象是OpenCV2 0之后引进的数据结构 自动分配内存 不存在内存泄漏的问题 xff0c 是面向对象的数据结构 IplImage是从2001年OpenCV发布之后就一直存在的 xff0c 是C语言风