《学习opencv》笔记——矩阵和图像操作——cvCalcCovarMatrix,cvCmp and cvCmpS

本文是学习OpenCV过程中关于矩阵和图像操作的笔记,详细介绍了cvCalcCovarMatrix、cvCmp及cvCmpS三个函数的使用,包括它们的结构和在图像处理中的应用。通过实例程序展示如何进行实际操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


矩阵和图像的操作


(1)cvCalcCovarMatrix函数

其结构


void cvCalcCovarMatrix(计算给定点的均值和协方差矩阵
	const CvArr** vects,//给定向量
	int count,//给定向量的组数
	CvArr* cov_mat,//结果矩阵
	CvArr* avg,//根据flag得到结果
	int flags//标记位
);


标记位参数值极其意义


标志参数的具体标志值

意义

CV_COVAR_NORMAL

计算均值和协方差

CV_COVAR__SCRAMBLED

快速PCA”Scrambled”协方差

CV_COVAR_USE_AVERAGE

输入均值而不是计算均值

CV_COVAR_SCALE

重新缩放输出的协方差矩阵


实例程序


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

float Coordinates[ 20 ]={ 1.5 , 2.3 , 3.0 , 1.7 , 1.2 , 2.9 , 2.1 , 2.2 , 3.1 , 3.1 , 1.3 , 2.7 , 2.0 , 1.7 , 1.0 , 2.0 , 0.5 , 0.6 , 1.0 , 0.9 }; 

int main() 
{ 
	CvMat *Vector[ 1 ]; 
	CvMat *Vector1; 
	CvMat *CovarMatrix; 
	CvMat *avg;  

	Vector1=cvCreateMat( 10 , 2 ,CV_32FC1); 
	cvSetData(Vector1,Coordinates,Vector1->step); 
	Vector[ 0 ]=Vector1; 
	CovarMatrix=cvCreateMat( 2 , 2 ,CV_32FC1); 
	avg=cvCreateMat( 1 , 2 ,CV_32FC1); 

	cvCalcCovarMatrix(( const CvArr **)Vector, 10 ,CovarMatrix,avg,CV_COVAR_SCALE+CV_COVAR_NORMAL+CV_COVAR_ROWS);

	for ( int i= 0 ;i< 2 ;i++) 
	{ 
		for ( int j= 0 ;j< 2 ;j++) 
		{ 
			printf( "%f " ,cvGetReal2D(CovarMatrix,i,j)); 
		} 
		printf( "\n" ); 
	} 
	for ( int i= 0 ;i< 1 ;i++) 
	{ 
		for ( int j= 0 ;j< 2 ;j++) 
		{ 
			printf( "%f " ,cvGetReal2D(avg,i,j)); 
		} 
		printf( "\n" ); 
	} 
	getchar();
	return 0;
}

输出结果




(2)cvCmp函数

其结构


void cvCmp(//比较两幅相应的图像的像素点
	const CvArr* src1,//图像一
	const CvArr* src2,//图像二
	CvArr* dst,//结果矩阵
	int cmp_op//标记参数
);


cmp_op值及其意义


cmp_op的值

比较方法

CV_CMP_EQ

(src1i == src2i)

CV_CMP_GT

(src1i > src2i)

CV_CMP_GE

(src1i >= src2i)

CV_CMP_LT

(src1i < src2i)

CV_CMP_LE

(src1i <= src2i)

CV_CMP_NE

(src1i != src2i)


实例程序


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

int main(int argc, char** argv)
{
	IplImage *src1, *src2,*src3;
	src1=cvLoadImage("5.jpg");
	src2=cvLoadImage("6.jpg");
	src3=cvLoadImage("5.jpg");


	cvCmp(src1,src2,src3,CV_CMP_GE);
	cvShowImage( "测试1", src1);
	cvShowImage( "测试2", src2);
	cvShowImage( "测试3", src3);
	cvWaitKey();
	return 0;
}

输出结果




(3)cvCmpS函数

其结构


void cvCmpS(//比较图像的像素点与value
	const CvArr* src1,//图像
	double value,//给定值
	CvArr* dst,//结果矩阵
	int cmp_op//标记参数
);

其中cmp_op参数的值与上个函数相同


实例程序


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

int main(int argc, char** argv)
{
	IplImage *src1,*src2;
	src1=cvLoadImage("5.jpg");
	src2=cvLoadImage("5.jpg");


	cvCmpS(src1,250.2,src2,CV_CMP_GE);
	cvShowImage( "测试1", src1);
	cvShowImage( "测试2", src2);
	cvWaitKey();
	return 0;
}

输出结果




to be continued






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值