《得知opencv》注意事项——矩阵和图像处理——cvOr,cvOrS,cvrReduce,cvRepeat,cvScale,cvSet and cvSetZero

矩阵和图像的操作

(1)cvOr函数

其结构

void cvOr(//两个矩阵相应元素做或执行
	const CvArr* src1,//矩阵1
	const CvArr* src2,//矩阵2
	CvArr* dst,//结果矩阵
	const CvArr* mask = NULL//矩阵“开关”
);

实例代码

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

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

	cvOr(src1,src2,src3);

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

输出结果

(2)cvOrS函数

其结构

void cvOr(//矩阵与给定标量做或运算
	const CvArr* src1,//矩阵1
	CvScalar value,//给定变量
	CvArr* dst,//结果矩阵
	const CvArr* mask = NULL//矩阵“开关”
);

实例代码

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

int main(int argc, char** argv)
{
	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;

	cvOrS(src1,cs,src2);

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

输出结果

(3)cvReduce函数

其结构

CvSize CvReduce(//完毕由op指定的约简
	const CvArr* src,//目标矩阵
	CvArr* dst,//结果矩阵
	int dim = -1,//因子系数,//1合并成行,0合并成列。-1转化成相应的dis
	int op = CV_REDUCE_SUM//指定约简法则
);

ps:当中的op代表的转换操作

op的值 结果
CV_REDUCE_SUM 计算全部向量的总和
CV_REDUCE_AVG 计算全部向量的平均值
CV_REDUCE_MAX 计算全部向量中的最大值
CV_REDUCE_MIN 计算全部向量中的最小值

实例代码

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

int main()
{
	double a[5][5] =
	{
		{1,0,0,0,6},
		{0,2,0,7,0},
		{0,0,3,0,0},
		{0,9,0,4,0},
		{8,0,0,0,5}
	};

	double b[5] = {0};

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

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

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

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

	cvReduce(&va,&vb,1,CV_REDUCE_SUM);

	cout << "结果向量"<<endl;

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

	getchar();
	return 0;
}

输出结果

(4)cvRepeat函数

其结构

void cvRepeat(//复制图像
	const CvArr* src,//目标矩阵
	CvArr* dst//结果矩阵
);

实例代码

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

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

	cvRepeat(src1,src2);

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

输出结果

(5)cvScale函数

其结构

void cvScale(//进行线性变换转换
	const CvArr* src,//输入矩阵
	CvArr* dst,//输出矩阵
	double scale,//比例因子
	double shift = 0.0//放缩比例
);

实例代码

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

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

	IplImage* src2 = cvCloneImage(src1);  

	IplImage* dst = cvCreateImage(cvGetSize(src1),IPL_DEPTH_64F,src1->nChannels);  

	double max_Val,min_Val;
	cvScale(src1,dst,1.0,0.0);
	cvAdd(dst,dst,dst);  

	cvMinMaxLoc(dst, &min_Val, &max_Val, NULL, NULL, NULL);  

	cvScale(dst,src2,1.0,0.0);  

	cvScale(dst, dst, 1.0/(max_Val-min_Val), 1.0*(-min_Val)/(max_Val-min_Val));

	cvMinMaxLoc(dst, &min_Val, &max_Val, NULL, NULL, NULL);  

	cvShowImage("測试1",src1);  

	cvShowImage("測试2",src2);  

	cvShowImage("结果",dst);  

	cvWaitKey(-1);
	return 0;
}

输出结果

(6)cvSet函数

其结构

void cvSet(//对图像中的像素设置value
	CvArr* arr,//目标矩阵
	CvScalar value,//设置值
	const,CvArr* mask = NULL//图像开关
);

实例代码

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

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

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

	cvSet(src1,cs);

	cvShowImage( "结果图", src1);
	cvShowImage( "原图", src2);
	cvWaitKey();
	return 0;
}

输出结果

(7)cvSetZero函数

其结构

void cvSetZero(//对图像自己主动设置为零,相当于cvSet(0.0)
	CvArr* arr,//目标矩阵
);

实例代码

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

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

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

	cvSetZero(src1);

	cvShowImage( "结果图", src1);
	cvShowImage( "原图", src2);
	cvWaitKey();
	return 0;
}

输出结果

to be continued

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-10-13 03:35:32

《得知opencv》注意事项——矩阵和图像处理——cvOr,cvOrS,cvrReduce,cvRepeat,cvScale,cvSet and cvSetZero的相关文章

《学习opencv》笔记——矩阵和图像操作——cvOr,cvOrS,cvrReduce,cvRepeat,cvScale,cvSet and cvSetZero

矩阵和图像的操作 (1)cvOr函数 其结构 void cvOr(//两个矩阵对应元素做或运行 const CvArr* src1,//矩阵1 const CvArr* src2,//矩阵2 CvArr* dst,//结果矩阵 const CvArr* mask = NULL//矩阵"开关" ); 实例代码 #include <cv.h> #include <highgui.h> #include <stdio.h> int main(int arg

《得知opencv》注意事项——矩阵和图像处理——cvAdd、cvAddS and cvAddWeighted

矩阵和图像操作 (1)cvAdd函数 其结构 void cvAdd(//图像加和 const CvArr* src1,//第一个原矩阵 const CvArr* src2,//第二个原矩阵 CvArr* dst, //存放矩阵 const CvArr* mask = NULL: //控制点 ); 就是单纯的将两个图像加和.mask变量控制加和的元素点.相当于"开关的作用"; 程序实例 #include <cv.h> #include <highgui.h> #i

《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag

矩阵和图像操作 (1)cvGEMM函数 其结构 double cvGEMM(//矩阵的广义乘法运算 const CvArr* src1,//乘数矩阵 const CvArr* src2,//乘数矩阵 double alpha,//1号矩阵系数 const CvArr* src3,//加权矩阵 double beta,//2号矩阵系数 CvArr* dst,//结果矩阵 int tABC = 0//变换标记 ); tABC变换标记及其相应的含义 CV_GEMM_A_T 转置 src1 CV_GEM

《学习opencv》笔记——矩阵和图像处理——cvAnd、cvAndS、cvAvg and cvAvgSdv

矩阵和图像的操作 (1)cvAnd函数 其结构 void cvAnd( //将src1和src2按像素点取"位与运算" const CvArr* src1,//第一个矩阵 const CvArr* src2,//第二个矩阵 CvArr* dst,//结果矩阵 const CvArr* mask = NULL;//矩阵经行像素点与的"开关" ); 程序实例 #include <cv.h> #include <highgui.h> #includ

《学习opencv》笔记——矩阵和图像处理——cvMinManLoc,cvMul,cvNot,cvNorm and cvNormalize

矩阵和图像的操作 (1)cvMinManLoc函数 其结构 void cvMinMaxLoc(//取出矩阵中最大最小值 const CvArr* arr,//目标矩阵 double* min_val,//最小值 double* max_val,//最大值 CvPoint* min_loc = NULL,//最小值位置 CvPoint* max_loc = NULL,//最大值位置 const CvArr* mask = NULL//矩阵"开关" ); 实例代码 #include <

《学习opencv》笔记——矩阵和图像操作——cvGEMM,cvGetCol,cvGetCols and cvGetDiag

矩阵和图像的操作 (1)cvGEMM函数 其结构 double cvGEMM(//矩阵的广义乘法运算 const CvArr* src1,//乘数矩阵 const CvArr* src2,//乘数矩阵 double alpha,//1号矩阵系数 const CvArr* src3,//加权矩阵 double beta,//2号矩阵系数 CvArr* dst,//结果矩阵 int tABC = 0//变换标记 ); tABC变换标记及其对应的含义 CV_GEMM_A_T 转置 src1 CV_GE

OpenCV快速遍历矩阵元素方法

OpenCV中Mat矩阵data数据的存储方式和二维数组不一致,二维数组按照行优先的顺序依次存储,而Mat中还有一个标示行步进的变量Step.使用Mat.ptr<DataTyte>(row) 行指针的方式定位到每一行,可快速遍历矩阵.例程如下: 1 std::cout << "The inverse matrix of K is:" << std::endl; 2 for(int i=0;i<3;i++) 3 { 4 float* data =

《学习opencv》笔记——矩阵和图像操作——cvDet,cvDit,cvDotProduct,cvEigenVV and cvFlip

矩阵和图像的操作 (1)cvDet函数 其结构 double cvDet(//计算矩阵的行列式 const CvArr* mat ); 实例代码 #include <cv.h> #include <highgui.h> #include <stdio.h> #include <iostream> using namespace std; int main() { double va[] = {1,0,0,0,2,0,0,0,3}; CvMat Va=cvMa

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

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump