《学习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,如需转载请自行联系原作者
相关文章
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
11158 4
|
计算机视觉
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
在使用OpenCV的cv2模块保存带有中文命名的图片时,直接使用cv2.imwrite()会导致乱码问题,可以通过改用cv2.imencode()方法来解决。
623 0
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
3296 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
183 4
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
814 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
353 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
Ubuntu Linux C语言
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
本文介绍了在Ubuntu 18.04系统上编译安装OpenCV 3.4.0及其扩展包opencv_contrib 3.4.0的详细步骤,包括下载源码、安装依赖、配置CMake和编译安装,以及常见问题的解决方法。
1233 1
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
缓存 监控 计算机视觉
视频监控笔记(三):opencv结合ffmpeg获取rtsp摄像头相关信息
本文介绍了如何使用OpenCV结合FFmpeg获取RTSP摄像头信息,包括网络架构、视频监控系统组成、以及如何读取和显示网络摄像头视频流。
462 1
|
Serverless 计算机视觉
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
这篇文章介绍了如何使用OpenCV库通过mask图像绘制分割对象的外接椭圆。首先,需要加载mask图像,然后使用`cv2.findContours()`寻找轮廓,接着用`cv2.fitEllipse()`拟合外接椭圆,最后用`cv2.ellipse()`绘制椭圆。文章提供了详细的代码示例,展示了从读取图像到显示结果的完整过程。
263 0
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆