《学习opencv》笔记——矩阵和图像操作——cvInRange,cvInRangeS,cvInvert and cvMahalonobis
2024-08-22 15:46:25
矩阵和图像的操作
(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
最新文章
- Encountered an unexpected error when attempting to resolve tag helper directive &#39;@addTagHelper&#39; with value &#39;";*, Microsoft.AspNet.Mvc.TagHelpers";&#39;
- XML基础
- Derived Column 用法
- Unity 性能
- linux 远程管理
- .net转php laraval框架学习系列(二)项目实战---Models
- 基本的 html 代码
- 10.PHP 教程_PHP If...Else 语句
- C# Programming Study #2
- 在windows上编译MatConvNet
- HDU 3346 Lucky Number
- 一个只有99行代码的JS流程框架(二)
- 如何将Android Studio与华为软件开发云代码仓库无缝对接(二)
- win10配置Memcached及MVC5测试分布式缓存入门
- Spring定时任务(一):SpringTask使用
- .Net 接入CAS 遇到的坑
- Linux下创建和删除软、硬链接 可临时处理空间不足
- 【Hadoop】01_从官网下载Hadoop
- java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream异常解决方法
- AutoCAD2014的安装与激活
热门文章
- PHP性能调优---php-fpm - 启动参数及重要配置详解
- Linux学习笔记——基于鸟哥的Linux私房菜
- Django: ImportError: No module named &#39;corsheaders&#39;
- 解决ssh登陆过慢问题
- Bootstrap进阶五:Web开发中很实用的交互效果积累
- thinkphp中I()方法的详解
- react篇章-React Props
- ThreadLocal和ThreadLocalMap源码分析
- maven 发布jar包到远程仓库
- jQuery中bind,live,delegate,on的区别