1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
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拆开了计算,很有趣。暂不知道有多大用处。 |