当前位置: 首页 > news >正文

open cvMat的使用

Mat对象 自动分配内存 不会泄露数据 分 头部和数据部
ipllmage早期对象 需要自行分配与管理内存 导致内存泄漏

Mat对象构造函数与常用方法
常用方法:
**Mat()
Mat (int rows, int cols, int type)
Mat(ize size, in type)
Mat (int rows, int cols, int type, const Scalar 8S)
Mat (Size size, int type, const Scalar &S)
Mat (int ndims, const int ies, int type)
Mat (int ndims, const int sizes, int type, const Scalar &S)

常用方法
**
void copyTo(Mat mat) 完全复制一份
void convertTo(Mat dst, int type) 数据类型转换
Mat clone()完全复制一份
int chanels() 通道
int depth) 深度
bool empty(); 是否为空
uchar* ptr[i=0) 可不可以获取这个i(行)的指针**

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>//iostream没有后缀
#include <math.h>

using namespace cv;
using namespace std;

int main()
{
	Mat src;
	src = imread("D:/实验台/机器视觉/测试图片/机器人正面.jpg");
	if (src.empty())//如果src这个数据库属性为空
	{
		cout << "无法打开" << endl;
		return -1;
	}
	namedWindow("原图", CV_WINDOW_AUTOSIZE);
	//namedwindow函数与imshow函数同名时 namedwindow函数不起作用
	imshow("原图", src);

	/*
	Mat dst;
	dst=Mat(src.size(), src.type());

	//定义dst数据库与src数据库的大小和类型一致

	dst = Scalar(75,255, 255);
	//将图像设置成单一灰度和颜色*3通道
	*/

	//Mat dst = src.clone();
	//克隆一个和src完全一样的数据库


	Mat dst;
	//src.copyTo(dst);
	//clone是共享了与src的数据库 copyto是新建了数据库空间 clone的底层是copyto

	
	cvtColor(src, dst, CV_BGR2GRAY);
	//颜色空间转换函数
	printf("src通道数%d\n", src.channels());
	printf("dst通道数%d\n", dst.channels());
//	输出图像的通道数,我们一般看到的彩色图片为3通道的RGB图像
//	灰度图为单通道图像

	const uchar* firstRow = dst.ptr<uchar>(0);
	//获取dst第一行的行首指针,若获取其它行首指针,
	//将圆括号中的0改为目标行
	//获取第一行第一个元素的值,若获取第一行
	//第i个像素值,可以用firstRow[i]
	printf("第一像素值: %d\n", *firstRow);

	double t = getTickCount();

	printf("dst行数%d\n", dst.cols);//获取dst数据库的像素宽度 行数
	printf("dst列数%d\n", dst.rows);//获取dst数据库的像素高度 列数

	Mat M(3, 3, CV_8UC3, Scalar(0,0,255));
	imshow("自建图像", M);
	//构造一张3*3,像素值为(0,0,255)的图像M
	//CV_8UC3,8指8位,UC指u char类型,3指3通道
	//第四个参数表示初始化每个像素的多少 长度和通道数应一致

	Mat M1;
	M1.create(src.size(), src.type());
	M1 = Scalar(0, 0, 255);//创建一个单一色彩图像
	imshow("create创建图像", M1);//红色

	Mat dst2;
	Mat kernel = (Mat_<char>(3,3)<< 0, -1, 0, -1, 5, -1, 0, -1, 0);
	filter2D(src, dst2, -1, kernel);
	imshow("掩膜后的原图", dst2);

	 Mat zeros = Mat::zeros(src.size(), src.type());
	//Mat m2(128, 128, CV_8UC3,Scalar(25,25,115));
	//Mat m2 = Mat::eye(128, 128, CV_8UC1);
 	imshow("纯黑处理的原图", zeros);


	//定义一个3x3的像素数列集合 
	//3个通道
	cout << "M=" << endl << M << endl;
	namedWindow("复制后", CV_WINDOW_AUTOSIZE);
	imshow("复制后", dst);

	double time = (cvGetTickCount() - t) / getTickFrequency();
	printf("%.2fS\n",time);
	waitKey(0);
	return 0;
}

Mat对象使用
部分复制:一般情况下只会复制Mat对象的头和指针部分,不会复制数据部分
Mat A= imread(图片地址);
Mat B(A) 只复制

完全复制:如果想把Mat对象的头部和数据部分一起
复制,可以通过如下两个API实现
Mat A = B.clone();或Mat A; A.copyTo(B);

Mat对象使用-四个要点
1.输出图像的内存是自动分配的
2.使用QpenGV的C+接口,不需要考虑内存分配问题
3.赋值操作和拷贝构造函数只会复制头部分
4.使用clone与copyTo两个函数实现数据完全复制

dst = Scalar(75,255, 255);将图像设置成单一灰度和颜色

相关文章:

  • open cv像素的操作
  • 一个简单的Spring Web Service示例
  • open cv图片混合
  • C++第五章习题
  • open cv对比度与亮度调节
  • POJ 1905
  • open cv绘制形状与文字
  • open cv均值 中值 高斯 双边高斯 滤波及模糊
  • C语言运算符优先级
  • open cv膨胀与腐蚀
  • 浅谈外链因何而存在?
  • open cv形态学操作
  • 微软发布Surface平板电脑 再度挑战苹果
  • open cv提取水平线与垂直线
  • 用VBScript实现Zip解压缩目录中的所有文件
  • 时间复杂度分析经典问题——最大子序列和
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CODING 缺陷管理功能正式开始公测
  • CSS 提示工具(Tooltip)
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • ECS应用管理最佳实践
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Hibernate最全面试题
  • Javascript 原型链
  • JavaScript实现分页效果
  • Mocha测试初探
  • MQ框架的比较
  • rabbitmq延迟消息示例
  • React的组件模式
  • sublime配置文件
  • uni-app项目数字滚动
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 代理模式
  • 构建二叉树进行数值数组的去重及优化
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用Swoole加速Laravel(正式环境中)
  • 使用权重正则化较少模型过拟合
  • 一文看透浏览器架构
  • 与 ConTeXt MkIV 官方文档的接驳
  • 云大使推广中的常见热门问题
  • postgresql行列转换函数
  • ​Java并发新构件之Exchanger
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (10)ATF MMU转换表
  • (C语言)逆序输出字符串
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (黑马C++)L06 重载与继承
  • (论文阅读30/100)Convolutional Pose Machines
  • (三)c52学习之旅-点亮LED灯
  • (十)c52学习之旅-定时器实验
  • (十一)手动添加用户和文件的特殊权限
  • (已解决)什么是vue导航守卫
  • (转)Unity3DUnity3D在android下调试