OpenCV 5.0.0
Open Source Computer Vision
Loading...
Searching...
No Matches
samples/cpp/snippets/phase_corr.cpp

An example using the phaseCorrelate function

#include "opencv2/core.hpp"
using namespace cv;
int main(int, char* [])
{
VideoCapture video(0);
Mat frame, curr, prev, curr64f, prev64f, hann;
char key;
do
{
video >> frame;
cvtColor(frame, curr, COLOR_RGB2GRAY);
if(prev.empty())
{
prev = curr.clone();
}
prev.convertTo(prev64f, CV_64F);
curr.convertTo(curr64f, CV_64F);
Point2d shift = phaseCorrelate(prev64f, curr64f, hann);
double radius = std::sqrt(shift.x*shift.x + shift.y*shift.y);
if(radius > 5)
{
// draw a circle and line indicating the shift direction...
Point center(curr.cols >> 1, curr.rows >> 1);
circle(frame, center, (int)radius, Scalar(0, 255, 0), 3, LINE_AA);
line(frame, center, Point(center.x + (int)shift.x, center.y + (int)shift.y), Scalar(0, 255, 0), 3, LINE_AA);
}
imshow("phase shift", frame);
key = (char)waitKey(2);
prev = curr.clone();
} while(key != 27); // Esc to exit...
return 0;
}
Comma-separated Matrix Initializer.
Definition mat.hpp:964
CV_NODISCARD_STD Mat clone() const
Creates a full copy of the array and the underlying data.
MatSize size
Definition mat.hpp:2511
int cols
Definition mat.hpp:2488
bool empty() const
Returns true if the array has no elements.
int rows
the number of rows and columns or (-1, -1) when the matrix has more than 2 dimensions
Definition mat.hpp:2488
void convertTo(OutputArray m, int rtype, double alpha=1, double beta=0) const
Converts an array to another data type with optional scaling.
_Tp y
y coordinate of the point
Definition types.hpp:202
_Tp x
x coordinate of the point
Definition types.hpp:201
Class for video capturing from video files, image sequences or cameras.
Definition videoio.hpp:790
Point2i Point
Definition types.hpp:209
Point_< double > Point2d
Definition types.hpp:208
Scalar_< double > Scalar
Definition types.hpp:712
#define CV_64F
Definition interface.h:60
void imshow(const String &winname, InputArray mat)
Displays an image in the specified window.
int waitKey(int delay=0)
Waits for a pressed key.
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0, AlgorithmHint hint=cv::ALGO_HINT_DEFAULT)
Converts an image from one color space to another.
@ COLOR_RGB2GRAY
[8U/16U/32F]
Definition imgproc.hpp:548
void line(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws a line segment connecting two points.
void circle(InputOutputArray img, Point center, int radius, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws a circle.
@ LINE_AA
antialiased line
Definition imgproc.hpp:879
Point2d phaseCorrelate(InputArray src1, InputArray src2, InputArray window=noArray(), double *response=0)
The function is used to detect translational shifts that occur between two images.
void createHanningWindow(OutputArray dst, Size winSize, int type)
This function computes a Hanning window coefficients in two dimensions.
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3
Definition core.hpp:107