OpenCV学习笔记1

1.
cvCreateMat包括cvCreateMatHeader(创建CvMat结构,不为数据分配内存)和cvCreateData(只负责数据的内存分配)
cvCloneMat不仅创建一个和输入头一样的头,也分配各自数据区并将元数据复制到新的对象中。
CvMat*cvCreateMat(int rows,int cols,int type);
CvMat *cvCreateMatHeader(introws,int cols,int type);
CvMat*cvinitMatHeader(CvMat *mat,int rows,int cols,int type,void *data=NULL,intstep=CV_AUTOSTEP);


2.cvLoadImage
img=cvLoadImage(fileName,flag);
flag: >0 将读入的图像强制转换为一幅三通道彩色图像
       =0 将读入的图像强制转换为一幅单通道灰度图像
       <0 读入的图像通道数与所读入的文件相同.


3.马氏距离
http://people.revoledu.com/kardi/tutorial/Similarity/MahalanobisDistance.html


4.以下都是共享数据区域,一个修改
Mat A,C;
A=imread("a.jpg");
C=A;
Mat B(A);


以下是真正的拷贝
Mat F=A.clone();
Mat G;
A.copyTo(G);


5.IplImage----->Mat
IplImage *img=cvLoadImage();
Mat mtx(img);
Mat-àIplImage,CvMat
Mat I;
IplImage pI=I;
CvMat mI=I;


Mat---àIplImage,CvMat
Mat I;
IplImage* pI=&I.operator IplImage();
CvMat* mI=&I.operator CvMat();


6.Mat M;
M.create(4,4,CV_8UC(2));//4*4的二通道矩阵


7.构造小矩阵
MacC=(Mat_<double>(3,3)<<0,-1,0,-1,5,-1,5,-1,0,-1,0);//构造模板
Mat R=C.row(1).clone();//复制一行
Mat M(3,2,CV_8UC3);//3个通道
randu(M,Scalar::all(0),Scalar::all(255));//均匀分布随机数组,3行,6列


8.一种操作矩阵数据方式
MatIterator_<Vec3b>  it,end;
For(it=I.begin<Vec3b>(),end=I.end<Vec3b>();it!=end;++it)
{//只有一个循环
(*it)[0]=table[(*it)[0]];
(*it)[1]=table[(*it)[1]];
(*it)[2]=table[(*it)[2]];
}


9.ellipse的旋转角度和起末旋转角度都是和坐标轴的那种旋转方向不同的,也就是这里的旋转方向都是按照顺时针的。还有要注意的是和circle一样,参数thickness=-1时,图形就是填充的。


10.关于Scalar(255,0,0)作为RGB时,尽然是蓝色的,看来这个又是反的。


11.要想用RNG产生随机数,要这样用RNG rng = RNG(getTickCount());这样每次运行结果都不同。特别是getTickCount()是64bit系统专用的。


12.关于直接使用FileStorage实现类的读写,在samples下的filestorage.cpp文件有描述


13.saturate_cast<uchar>等用来确保数字不越界。比如saturate_cast<uchar>(280)--à255;


14.bilateralFilter双边滤波器,由于之前的平滑都把边缘平滑了,所以使用了双边滤波器。
d>5时会很慢,一般用d=5,当Sigmavalues大于10,会有卡通效果。
No in place
http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html


15.腐蚀、膨胀
erode,dilation
减小噪声,孤立单独像素或者分离像素,在图像中寻找洞(黑色)或者密集(白色)的洞


16.anchorpoint=Point(-1,-1)的问题
看到如下的话:
 Mat element =getStructuringElement( dilation_type,Size(2*dilation_size+1,2*dilation_size+1 ),Point( dilation_size, dilation_size ));
  /// Apply the dilation operation
那么如果Point(-1,-1)在这里则就是表示Point(dilation..)的意思了,而Point(0,0)表示最左上角的第一个元素。


17.通过convertScaleAbs来实现任意图像类型转化成可以显示的8U类型图像


18.通过把Soble的横纵图像按照0.5的权重相加的效果比直接使用Sobel(I,out3,CV_16S,1,1,3);好多了。而之所以使用CV_16S是防止溢出。


19.remap
Remap的作用看起来就是为了从新把图像像素进行移动,他把下标x和y拆开了计算,很有趣。暂不知道有多大用处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值