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

《学习opencv》笔记——矩阵和图像操作——cvSetIdentity,cvSolve,cvSplit,cvSub,cvSubS and cvSubRS...

矩阵和图像的操作


(1)cvSetIdentity函数

其结构


void cvSetIdentity(//将矩阵行与列相等的元素置为1。其余元素置为0
	CvArr* arr//目标矩阵
);

实例代码


#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int main() 
{ 

	double a[3][3] = 
	{    
		{1,2,3},
		{4,5,6},
		{7,8,9}
	};

	CvMat va = cvMat(3,3, CV_64FC1,a);

	cout<<"目标矩阵:"<<endl;

	for(int i=0;i<3;i++)
	{
		for(int j=0;j<3;j++)
			printf("%f\t",cvmGet(&va,i,j));
		cout << endl;
	}


	cvSetIdentity(&va);

	cout<<"结果矩阵:"<<endl;

	for(int i=0;i<3;i++)
	{
		for(int j=0;j<3;j++)
			printf("%f\t",cvmGet(&va,i,j));
		cout << endl;
	}

	getchar();
	return 0;

}

输出结果




(2)cvSolve函数

其结构


int cvSolve(//求解线性方程组解 src*dst = src2
	const CvArr* src1,//系数矩阵
	const CvArr* src2,//常数矩阵
	CvArr* dst,//解矩阵
	int method = CV_LU//用法
);

实例代码


#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream>
using namespace std;

int main() 
{ 
	cout<< "计算A*X = B中的解X:" <<endl;
	double a[3][3] = 
	{    
		{1,0,0},
		{0,2,0},
		{0,0,2}
	};

	CvMat va = cvMat(3,3,CV_64FC1,a);

	cout<<"A矩阵:"<<endl;

	for(int i=0;i<3;i++)
	{
		for(int j=0;j<3;j++)
			printf("%f\t",cvmGet(&va,i,j));
		cout << endl;
	}

	double b[3]={1,2,2};

	CvMat vb = cvMat(3,1,CV_64FC1,b);

	cout<<"B矩阵:"<<endl;

	for(int i=0;i<3;i++)
	{
		printf("%f\t",cvmGet(&vb,i,0));
		cout << endl;
	}

	double c[3]={0,0,0};

	CvMat vc = cvMat(3,1,CV_64FC1,c);

	cvSolve(&va,&vb,&vc);

	cout<<"解为:"<<endl;

	for(int i=0;i<3;i++)
	{
			printf("%f\t",cvmGet(&vc,i,0));
		cout << endl;
	}

	getchar();
	return 0;
}

输出结果




(3)cvSplit函数

其结构


void cvSplit(//分解多通道图像为各个单通道
	const CvArr* src,//目标图像
	CvArr* dst0,//单通道图像1
	CvArr* dst1,//单通道图像2
	CvArr* dst2,//单通道图像3
	CvArr* dst3//单通道图像4
);

实例代码


#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main() 
{ 
	IplImage *src1,*dst1,*dst2,*dst3,*dst4;
	src1=cvLoadImage("3.jpg",1);
	dst1 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
	dst2 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
	dst3 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);

	cvSplit(src1, dst1, dst2, dst3, 0);

	cvShowImage("1",src1);
	cvShowImage("2",dst1);
	cvShowImage("3",dst2);
	cvShowImage("4",dst3);

    cvWaitKey();
	return 0;
}

输出结果




(4)cvSub函数

其结构


void cvSub(//两个矩阵做减法
	const CvArr* src1,//被减矩阵
	const CvArr* src2,//减矩阵
	CvArr* dst,//结果矩阵
	const CvArr* mask = NULL//矩阵开关
);


实例代码


#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main() 
{ 
	IplImage *src1,*src2,*src3;

	src1 = cvLoadImage("3.jpg");
	src2 = cvLoadImage("1.jpg");
	src3 = cvLoadImage("7.jpg");

	cvSub(src1,src2,src3);

	cvShowImage("1",src1);
	cvShowImage("2",src2);
	cvShowImage("3",src3);

    cvWaitKey();
	return 0;
}

输出结果




(5)cvSubS函数

其结构


void cvSubS(//矩阵和值做减法
	const CvArr* src,//被减矩阵
	CvScalar value,//减数值
	CvArr* dst,//结果矩阵
	const CvArr* mask = NULL//矩阵“开关”
);	

实例代码

#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main() 
{ 
		IplImage *src1, *src2;
		src1 = cvLoadImage("1.jpg");
		src2 = cvLoadImage("7.jpg");

		CvScalar cs;
		cs.val[0] = 0;
		cs.val[1] = 255;
		cs.val[2] = 0;
		cs.val[3] = 0;

		cvSubS(src1,cs,src2);

		cvShowImage( "測试1", src1);
		cvShowImage( "測试2", src2);
		cvWaitKey();
		return 0;
}


输出结果



(6)cvSubRS函数

其结构


void cvSubRS(//给定值减去矩阵
	const CvArr* src,//减矩阵
	CvScalar value,//被减数值
	CvArr* dst,//结果矩阵
	const CvArr* mask = NULL//矩阵“开关”
);	

实例代码


#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main() 
{ 
		IplImage *src1, *src2;
		src1 = cvLoadImage("1.jpg");
		src2 = cvLoadImage("7.jpg");

		CvScalar cs;
		cs.val[0] = 0;
		cs.val[1] = 255;
		cs.val[2] = 0;
		cs.val[3] = 0;

		cvSubRS(src1,cs,src2);

		cvShowImage( "測试1", src1);
		cvShowImage( "測试2", src2);
		cvWaitKey();
		return 0;
}

输出结果





to be continued






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5153156.html,如需转载请自行联系原作者

相关文章:

  • JSF导航规则
  • WebBrowser 安全
  • 四种LaunchMode及其使用场景
  • 常用命令及小技巧等
  • 探究redux源码-衍生-中间件思想
  • 内置方法(1)
  • MYSQL汇总
  • online
  • Visual Studio 15.4发布,新增多平台支持
  • 麦克阿瑟天才奖得主解码计算机视觉“原罪”:AI 如何认识人类世界
  • php 二维数组排序/对数组分组
  • php数组·的方法-数组检索
  • 软件选择的起点:目的与需求
  • Loadrunner视频教程汇总
  • 离散点最小(凸)包围边界查找
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Angular 响应式表单之下拉框
  • docker容器内的网络抓包
  • Javascript设计模式学习之Observer(观察者)模式
  • Markdown 语法简单说明
  • Yeoman_Bower_Grunt
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 初识MongoDB分片
  • 复习Javascript专题(四):js中的深浅拷贝
  • 回顾2016
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 世界上最简单的无等待算法(getAndIncrement)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 白色的风信子
  • 湖北分布式智能数据采集方法有哪些?
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (2)STM32单片机上位机
  • (C语言)fgets与fputs函数详解
  • (day 12)JavaScript学习笔记(数组3)
  • (六)vue-router+UI组件库
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (五)MySQL的备份及恢复
  • (转)jdk与jre的区别
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core引入性能分析引导优化
  • .NET 材料检测系统崩溃分析
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET企业级应用架构设计系列之结尾篇
  • @RequestMapping处理请求异常
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ solr入门 ] - 利用solrJ进行检索
  • []FET-430SIM508 研究日志 11.3.31
  • [2018-01-08] Python强化周的第一天
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [Android 数据通信] android cmwap接入点
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [C++] 多线程编程-thread::yield()-sleep_for()