矩阵和图像的操作

(1)cvInRange函数

其结构

void cvInRange(//提取图像中在阈值中间的部分
const CvArr* src,//目标图像
const CvArr* lower,//阈值下限
const CvArr* upper,//阈值上限
CvArr* dst//结果图像
);

实例代码

#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream>
using namespace std; int main()
{
IplImage *src1,*src2,*dst11,*dst12,*dst13,*dst21,*dst22,*dst23;
src1=cvLoadImage("5.jpg");
src2=cvLoadImage("7.jpg");
dst11 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
dst12 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
dst13 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
dst21 = cvCreateImage(cvSize(src2->width, src1->height), IPL_DEPTH_8U, 1);
dst22 = cvCreateImage(cvSize(src2->width, src1->height), IPL_DEPTH_8U, 1);
dst23 = cvCreateImage(cvSize(src2->width, src1->height), IPL_DEPTH_8U, 1);
cvSplit(src1, dst11, dst12, dst13, 0);
cvSplit(src2, dst21, dst22, dst23, 0); cvInRange(dst12,dst21,dst23,dst23);
cvShowImage( "原图", src1);
cvShowImage("过滤图",src2);
cvShowImage( "结果图", dst23); cvWaitKey();
return 0;
}

输出结果

(2)cvInRangeS函数

其结构

void cvInRangeS(//提取图像中在阈值中间的部分
const CvArr* src,//目标图像
CvScalar lower,//阈值下限
CvScalar upper,//阈值上限
CvArr* dst//结果图像
);

实例代码

#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream>
using namespace std; int main()
{
IplImage *src1,*src2,*dst11,*dst12,*dst13,*dst21,*dst22,*dst23;
src1=cvLoadImage("5.jpg");
dst11 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
dst12 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
dst13 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1); CvScalar cs1;
cs1.val[0] = 0;
cs1.val[1] = 0;
cs1.val[2] = 0;
cs1.val[3] = 0;
CvScalar cs2;
cs2.val[0] = 80;
cs2.val[1] = 0;
cs2.val[2] = 0;
cs2.val[3] = 0; cvSplit(src1, dst11, dst12, dst13, 0); cvInRangeS(dst11,cs1,cs2,dst13);
cvShowImage( "原图", src1);
cvShowImage( "变单通过程图", dst11);
cvShowImage( "结果图", dst13); cvWaitKey();
return 0;
}

输出结果

(3)cvInvert函数

其结构

double cvInvert(//矩阵取逆
const CvArr* src,//目标矩阵
CvArr* dst,//结果矩阵
int method = CV_LU//逆运算方法
);

当中method有

方法的參数值 含义
CV_LU 高斯消去法
CV_SVD 神秘值分解
CV_SVD_SYM 对称矩阵的SVD

实例代码

#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream>
using namespace std; int main()
{
double a[3][3] =
{
{1,0,0},
{0,2,0},
{0,0,3}
}; 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;
} cvInvert(&va,&va); cout << "其逆矩阵为:";
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; }

输出结果

(4)cvMahalonobis函数

其结构

CvSize cvMahalonobis(//计算马氏距离
const CvArr* vec1,//样本向量
const CvArr* vec2,//平均值
CvArr* mat//协方差的逆
);

ps:关于什么是马氏向量,我也研究了半天,找了一些资料算是弄明确了个大概。

        关于马氏距离,定义的话自己百度百科即可。

关于理解和解释请參照博客:点击打开链接 通俗易懂

关于以下的代码实例的数据来源:点击打开链接

实例代码

#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream>
using namespace std; int main()
{
double a1[4] = {3,4,5,6};
double a2[4] = {2,2,8,4}; double b[4] = {2.5, 3, 6.5, 5}; double c[4][4] =
{
{0.25,0.50,-0.75,0.50},
{0.50,1.00,-1.50,1.00},
{-0.75,-1.50,2.25,-1.50},
{0.50,1.00,-1.50,1.00}
};
CvMat va1 = cvMat(1,4, CV_64FC1,a1);
CvMat va2 = cvMat(1,4, CV_64FC1,a2);
CvMat vb = cvMat(1,4, CV_64FC1,b);
CvMat vc = cvMat(4,4, CV_64FC1,c); cvInvert(&vc,&vc,CV_SVD); //协方差取逆,这个函数前面讲过 double r1 = cvMahalanobis(&va1,&vb,&vc);
double r2 = cvMahalanobis(&va2,&vb,&vc);
cout << "样本1的马氏距离:"<<endl;
cout<<r1<<endl;
cout << "样本2的马氏距离:"<<endl;
cout<<r2<<endl; getchar();
return 0;
}

输出实例

to be continued

《学习opencv》笔记——矩阵和图像操作——cvInRange,cvInRangeS,cvInvert and cvMahalonobis的更多相关文章

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

    矩阵和图像的操作 (1)cvCalcCovarMatrix函数 其结构 void cvCalcCovarMatrix(计算给定点的均值和协方差矩阵 const CvArr** vects,//给定向量 ...

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

    矩阵和图像的操作 (1)cvSetIdentity函数 其结构 void cvSetIdentity(//将矩阵行与列相等的元素置为1.其余元素置为0 CvArr* arr//目标矩阵 ); 实例代码 ...

  3. 《学习opencv》笔记——矩阵和图像操作——cvAnd、cvAndS、cvAvg and cvAvgSdv

    矩阵和图像的操作 (1)cvAnd函数 其结构 void cvAnd( //将src1和src2按像素点取"位与运算" const CvArr* src1,//第一个矩阵 cons ...

  4. 《学习opencv》笔记——矩阵和图像操作——cvAbs,cvAbsDiff and cvAbsDiffS

    矩阵和图像的操作 (1)cvAbs,cvAbsdiff,cvAbsDiffS 它们的结构为: void cvAbs( //取src中元素的绝对值,写到dst中 const CvArr* src, co ...

  5. 《学习opencv》笔记——矩阵和图像操作——cvCrossProduct and cvCvtColor

    矩阵和图像的操作 (1)cvCrossProduct函数 其结构 void cvCrossProdust(//计算两个三维向量的叉积 const CvArr* src1, const CvArr* s ...

  6. 《学习opencv》笔记——矩阵和图像操作——cvConvertScale,cvConvertScaleAbs,cvCopy and cvCountNonZero

    矩阵和图像的操作 (1)cvConvertScale函数 其结构: void cvConvertScale( //进行线性变换,将src乘scale加上shift保存到dst const CvArr* ...

  7. opencv笔记2:图像ROI

    time:2015年 10月 03日 星期六 12:03:45 CST # opencv笔记2:图像ROI ROI ROI意思是Region Of Interests,感兴趣区域,是一个图中的一个子区 ...

  8. OpenCV —— 矩阵和图像操作

    cvAbs , cvAbsDiff , cvAbsDiffS cvAdd , cvAddS , cvAddWeighted(可添加权重) #include <cv.h> #include ...

  9. OpenCV利用矩阵实现图像旋转

    利用OpenCV的矩阵操作实现图像的逆时针旋转90度操作 代码 Mat src = imread("C:\\Users\\fenggl\\Desktop\\测试.jpg",MREA ...

随机推荐

  1. 打印数据的字节(十六进制)表示-c语言代码

    先取数据地址,转换成单字节长度的类型(unsigned char)的指针,然后按照十六进制逐字节打印即可,格式为“%.2x”. sizeof()函数获取数据的字节数. /* $begin show-b ...

  2. 在jenkins里使用SCM管理jenkinsfile

    注意,这样作的前提是,插件里一定要安装pipeline和git. 设置就比较简单了. 在gitlat里生成一个演示的jenkinsfile pipeline { agent { node { labe ...

  3. Hive(七)Hive分析窗口函数

    一数据准备 cookie1,2015-04-10,1 cookie1,2015-04-11,5 cookie1,2015-04-12,7 cookie1,2015-04-13,3 cookie1,20 ...

  4. Gitlab-system-hooks

    当创建或者删除,用户或者项目时,可能想收到一个通知.Gitlab支持这种类型的system hooks. 下面事件可以触发一个system webhook调用. Project created Pro ...

  5. Vue图片懒加载插件

    图片懒加载是一个很常用的功能,特别是一些电商平台,这对性能优化至关重要.今天就用vue来实现一个图片懒加载的插件. 这篇博客采用"三步走"战略--Vue.use().Vue.dir ...

  6. shell 转码BIG5 UTF8

    BIG-5 轉 UTF-8 若要將一個文字檔從 BIG-5 編碼轉換為 UTF-8 編碼,可以執行: iconv -f BIG-5 -t UTF-8 big5.txt > utf8.txt 其中 ...

  7. bs和cs

    CS(Client/Server):客户端----服务器结构.C/S结构在技术上很成熟,它的主要特点是交互性强.具有安全的存取模式.网络通信量低.响应速度快.利于处理大量数据.因为客户端要负责绝大多数 ...

  8. JPG图片EXIF信息提取工具exif

    JPG图片EXIF信息提取工具exif   有相机生成的JPG图片(如照片)都包含有EXIF信息.这些信息包括拍照所使用的设备.地理位置.拍摄时间等敏感信息.Kali Linux内置了EXIF信息提取 ...

  9. python 并集union, 交集intersection, 差集difference, 对称差集symmetric_difference

    python的集合set和其他语言类似,是一个无序不重复元素集, 可用于消除重复元素. 支持union(联合), intersection(交), difference(差)和sysmmetric d ...

  10. QQ怎么 发送 已经录好的视频

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha QQ发送 已经录好的视频 直接放过去,对方是需要下载的. 只有通过QQ录制的,才是直接就 ...