phase函数——opencv

使用示例:

cvtColor(left, left, CV_BGR2GRAY);
Sobel(left, grad1, CV_64FC1, 1, 0); //求梯度
Sobel(left, grad2, CV_64FC1, 0, 1);
phase(grad1, grad2, angle, true); //求角度
double min, max;
minMaxLoc(angle, &min, &max);
cout << "min:" << min << " max:" << max << endl;
normalize(angle, angle, 0, 255, NORM_MINMAX); //归一化

left:

  

grad1:

grad2:

nomalize前的angle中的最大值和最小值:

normalize后的angle:

分析:

参数angleInDegrees默认为false,即弧度,当置为true时,则输出为角度。phase函数根据函数来计算角度,计算精度大约为0.3弧度,当x,y相等时,angle为0。数学上函数atan2为:

该函数的值域为,可以通过对负数结果加的方法,将函数的结果映射到范围内。

而c++中atan2函数是通过正切值返回弧度的,并通过判断x,y的正负决定象限,因此c++中atan2函数值域是从-Pi到Pi的。

  角度:

Mat mat1(Size(4, 1), CV_32FC1), mat2(Size(4, 1), CV_32FC1), mat3;
mat1.at<float>(0, 0) = 1;  mat2.at<float>(0, 0) = 1;
mat1.at<float>(0, 1) = 1;  mat2.at<float>(0, 1) = -1;
mat1.at<float>(0, 2) = -1; mat2.at<float>(0, 2) = 1;
mat1.at<float>(0, 3) = -1; mat2.at<float>(0, 3) = -1;
phase(mat1,mat2,mat3,true);

最后mat3的计算结果:。由此可以看出opencv phase计算出的角度从0°-360°是已x轴正方向为0°,逆时针旋转增加,符合我们平常角度的计算方式。

时间: 2024-10-13 00:20:39

phase函数——opencv的相关文章

几个重要的函数opencv

1.CvCapture结构体: CvCapture是一个结构体,用来保存图像捕获的信息,就像一种数据类型(如int,char等)只是存放的内容不一样,在OpenCv中,它最大的作用就是处理视频时(程序是按一帧一帧读取),让程序读下一帧的位置,CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧回复. 如CvCapture* pCapture = NULL; 2.cvCreateFileCapture(const char* mov) cvCreateFileCapture()通

OpenCV for Python 学习 (二 事件与回调函数)

今天主要看了OpenCV中的事件以及回调函数,这么说可能不准确,主要是下面这两个函数(OpenCV中还有很多这些函数,可以在 http://docs.opencv.org/trunk/modules/highgui/doc/user_interface.html 找到,就不一一列举了),然后自己做了一个简单的绘图程序 函数如下: cv2.setMouseCallback(windowName, onMouse[, param]) cv2.createTrackbar(trackbarName,

atitit &#160;opencv apiattilax总结&#160;约500个函数 .xlsx

atitit  opencv apiattilax总结 约500个函数 .xlsx 1.1. CxCore中文参考手册 1 1.2. 机器学习中文参考手册  knn  svm  1 1.3. CvAux中文参考手册 立体匹配   3D Tracking PCA) Markov Models    \3 1.4. 图像处理  1 梯度.边缘和角点  2 采样.插值和几何变换  3 形态学操作 4 滤波器与色彩空间变换 5 金字塔及其应用  6 连接部件   7 图像与轮廓矩 8 特殊图像变换 9

opencv 访问图像像素的三种方式

访问图像中的像素 访问图像像素有三种可行的方法方法一:指针访问指针访问访问的速度最快,Mat类可以通过ptr函数得到图像任意一行的首地址,同时,Mat类的一些属性也可以用到公有属性 rows和cols 表示行和列通道数可以通过channels()函数获得:void visitPix1(){ Mat srcImg = imread("jpg/1.jpeg"); Mat dstImg; srcImg.copyTo(dstImg); int rowNum = dstImg.rows; int

OpenCV 之 支持向量机 (一)

统计学习方法是由 模型 + 策略 + 算法 构成的,构建一种统计学习方法 (例如,支持向量机),实际上就是具体去确定这三个要素. 1  支持向量机 支持向量机,简称 SVM (Support Vector Machine),是一种二分分类模型. 1) 基本模型 (model) 定义在特征空间上的,一种间隔 (margin) 最大的,线性分类器 (linear classifier) 2) 学习策略 (strategy) 使间隔最大化,可转化为求解凸二次规划的问题. 3) 学习算法 (algori

OpenCV 之 边缘检测

上一篇 <OpenCV 之 图像平滑> 中,提到的图像平滑,从信号处理的角度来看,实际上是一种低通滤波器. 本篇中,数字图像的边缘,因为通常都是像素值变化剧烈的区域 (“高频”),故可将边缘检测视为“高通滤波” OpenCV 中,边缘检测常用的是索贝尔算子 (Sobel) 和拉普拉斯算子 (Laplace),分别是对图像求一阶导和二阶导 1  索贝尔算子 (Sobel) 1.1  计算过程 假定输入图像矩阵为 I,卷积核大小为 3x3,则水平一阶导数 Gx 和垂直一阶导数 Gy 分别为: $\

OpenCV 之 图像平滑

OpenCV 之 图像平滑 1  图像平滑 图像平滑,可用来对图像进行去噪 (noise reduction) 或 模糊化处理 (blurring),实际上图像平滑仍然属于图像空间滤波的一种 (低通滤波) 既然是滤波,则图像中任一点 (x, y),经过平滑滤波后的输出 g(x, y) 如下: g(x,y)=∑s=−aa∑t=−bbw(s,t)f(x+s,y+t)g(x,y)=∑s=−aa∑t=−bbw(s,t)f(x+s,y+t) 以 3X3 的滤波器为例 (即 a=b=1),则矩阵 Mx 和

OpenCV 之 图像分割 (一)

1  基于阈值 1.1  基本原理 灰度阈值化,是最简单也是速度最快的一种图像分割方法,广泛应用在硬件图像处理领域 (例如,基于 FPGA 的实时图像处理). 假设输入图像为 f,输出图像为 g,则经过阈值化处理的公式如下: $\quad g(i, j) = \begin{cases} 1 & \text{当 f(i, j) ≥ T 时} \\0 & \text{当 f(i, j) < T 时} \\ \end{cases} $ 也即,遍历图像中的所有像素,当像素值 f (i, j)

【计算机视觉】OpenCV人脸识别facerec源码分析2——LBPH概述

人脸识别 从OpenCV2.4开始,加入了新的类FaceRecognizer,我们可以使用它便捷地进行人脸识别实验.其源代码可以在OpenCV中的opencv\modules\contrib\doc\facerec\src下找到. 目前支持的算法有: Eigenfaces特征脸createEigenFaceRecognizer() Fisherfaces createFisherFaceRecognizer() Local Binary Patterns Histograms局部二值直方图 cr