Commit f2a3e7e3 authored by Vadim Pisarevsky's avatar Vadim Pisarevsky

converted some more samples to C++

parent 4c160acc
...@@ -17,7 +17,6 @@ enum { DETECTION = 0, CAPTURING = 1, CALIBRATED = 2 }; ...@@ -17,7 +17,6 @@ enum { DETECTION = 0, CAPTURING = 1, CALIBRATED = 2 };
void help() void help()
{ {
printf( "This is a camera calibration sample that calibrates 3 horizontally placed cameras together.\n" printf( "This is a camera calibration sample that calibrates 3 horizontally placed cameras together.\n"
"Usage: 3calibration\n" "Usage: 3calibration\n"
" -w <board_width> # the number of inner corners per one of board dimension\n" " -w <board_width> # the number of inner corners per one of board dimension\n"
...@@ -32,20 +31,6 @@ void help() ...@@ -32,20 +31,6 @@ void help()
} }
static void calcChessboardCorners(Size boardSize, float squareSize, vector<Point3f>& corners) static void calcChessboardCorners(Size boardSize, float squareSize, vector<Point3f>& corners)
{ {
corners.resize(0); corners.resize(0);
...@@ -56,7 +41,6 @@ static void calcChessboardCorners(Size boardSize, float squareSize, vector<Point ...@@ -56,7 +41,6 @@ static void calcChessboardCorners(Size boardSize, float squareSize, vector<Point
float(i*squareSize), 0)); float(i*squareSize), 0));
} }
static bool run3Calibration( vector<vector<Point2f> > imagePoints1, static bool run3Calibration( vector<vector<Point2f> > imagePoints1,
vector<vector<Point2f> > imagePoints2, vector<vector<Point2f> > imagePoints2,
vector<vector<Point2f> > imagePoints3, vector<vector<Point2f> > imagePoints3,
......
...@@ -29,16 +29,16 @@ if (BUILD_EXAMPLES) ...@@ -29,16 +29,16 @@ if (BUILD_EXAMPLES)
# --------------------------------------------- # ---------------------------------------------
MACRO(MY_DEFINE_EXAMPLE name srcs) MACRO(MY_DEFINE_EXAMPLE name srcs)
set(the_target "example_${name}") set(the_target "example_${name}")
add_executable(${the_target} ${srcs}) add_executable(${the_target} ${srcs})
set_target_properties(${the_target} PROPERTIES set_target_properties(${the_target} PROPERTIES
OUTPUT_NAME "${name}" OUTPUT_NAME "${name}"
PROJECT_LABEL "(EXAMPLE) ${name}") PROJECT_LABEL "(EXAMPLE) ${name}")
add_dependencies(${the_target} opencv_core opencv_flann opencv_imgproc opencv_highgui add_dependencies(${the_target} opencv_core opencv_flann opencv_imgproc opencv_highgui
opencv_ml opencv_video opencv_objdetect opencv_features2d opencv_ml opencv_video opencv_objdetect opencv_features2d
opencv_calib3d opencv_legacy opencv_contrib) opencv_calib3d opencv_legacy opencv_contrib)
target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} opencv_core target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} opencv_core
opencv_flann opencv_imgproc opencv_highgui opencv_ml opencv_video opencv_objdetect opencv_flann opencv_imgproc opencv_highgui opencv_ml opencv_video opencv_objdetect
opencv_features2d opencv_calib3d opencv_legacy opencv_contrib) opencv_features2d opencv_calib3d opencv_legacy opencv_contrib)
if(WIN32) if(WIN32)
install(TARGETS ${the_target} install(TARGETS ${the_target}
......
This diff is collapsed.
#include "opencv2/highgui/highgui.hpp" #include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc_c.h" #include "opencv2/imgproc/imgproc.hpp"
#include <stdio.h> #include <iostream>
IplImage* inpaint_mask = 0; using namespace cv;
IplImage* img0 = 0, *img = 0, *inpainted = 0; using namespace std;
CvPoint prev_pt = {-1,-1};
void on_mouse( int event, int x, int y, int flags, void* ) Mat img, inpaintMask;
{ Point prevPt(-1,-1);
if( !img )
return;
void onMouse( int event, int x, int y, int flags, void* )
{
if( event == CV_EVENT_LBUTTONUP || !(flags & CV_EVENT_FLAG_LBUTTON) ) if( event == CV_EVENT_LBUTTONUP || !(flags & CV_EVENT_FLAG_LBUTTON) )
prev_pt = cvPoint(-1,-1); prevPt = Point(-1,-1);
else if( event == CV_EVENT_LBUTTONDOWN ) else if( event == CV_EVENT_LBUTTONDOWN )
prev_pt = cvPoint(x,y); prevPt = Point(x,y);
else if( event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON) ) else if( event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON) )
{ {
CvPoint pt = cvPoint(x,y); Point pt(x,y);
if( prev_pt.x < 0 ) if( prevPt.x < 0 )
prev_pt = pt; prevPt = pt;
cvLine( inpaint_mask, prev_pt, pt, cvScalarAll(255), 5, 8, 0 ); line( inpaintMask, prevPt, pt, Scalar::all(255), 5, 8, 0 );
cvLine( img, prev_pt, pt, cvScalarAll(255), 5, 8, 0 ); line( img, prevPt, pt, Scalar::all(255), 5, 8, 0 );
prev_pt = pt; prevPt = pt;
cvShowImage( "image", img ); imshow("image", img);
} }
} }
...@@ -32,49 +31,48 @@ void on_mouse( int event, int x, int y, int flags, void* ) ...@@ -32,49 +31,48 @@ void on_mouse( int event, int x, int y, int flags, void* )
int main( int argc, char** argv ) int main( int argc, char** argv )
{ {
char* filename = argc >= 2 ? argv[1] : (char*)"fruits.jpg"; char* filename = argc >= 2 ? argv[1] : (char*)"fruits.jpg";
Mat img0 = imread(filename, -1);
if( (img0 = cvLoadImage(filename,-1)) == 0 ) if(img0.empty())
{
cout << "Usage: inpaint <image_name>\n";
return 0; return 0;
}
printf( "Hot keys: \n" cout << "Hot keys: \n"
"\tESC - quit the program\n" "\tESC - quit the program\n"
"\tr - restore the original image\n" "\tr - restore the original image\n"
"\ti or SPACE - run inpainting algorithm\n" "\ti or SPACE - run inpainting algorithm\n"
"\t\t(before running it, paint something on the image)\n" ); "\t\t(before running it, paint something on the image)\n";
cvNamedWindow( "image", 1 ); namedWindow( "image", 1 );
img = cvCloneImage( img0 ); img = img0.clone();
inpainted = cvCloneImage( img0 ); inpaintMask = Mat::zeros(img.size(), CV_8U);
inpaint_mask = cvCreateImage( cvGetSize(img), 8, 1 );
cvZero( inpaint_mask ); imshow("image", img);
cvZero( inpainted ); setMouseCallback( "image", onMouse, 0 );
cvShowImage( "image", img );
cvShowImage( "inpainted image", inpainted );
cvSetMouseCallback( "image", on_mouse, 0 );
for(;;) for(;;)
{ {
int c = cvWaitKey(0); char c = (char)waitKey();
if( (char)c == 27 ) if( c == 27 )
break; break;
if( (char)c == 'r' ) if( c == 'r' )
{ {
cvZero( inpaint_mask ); inpaintMask = Scalar::all(0);
cvCopy( img0, img ); img0.copyTo(img);
cvShowImage( "image", img ); imshow("image", img);
} }
if( (char)c == 'i' || (char)c == ' ' ) if( c == 'i' || c == ' ' )
{ {
cvNamedWindow( "inpainted image", 1 ); Mat inpainted;
cvInpaint( img, inpaint_mask, inpainted, 3, CV_INPAINT_TELEA ); inpaint(img, inpaintMask, inpainted, 3, CV_INPAINT_TELEA);
cvShowImage( "inpainted image", inpainted ); imshow("inpainted image", inpainted);
} }
} }
return 1; return 0;
} }
#include "opencv2/video/tracking.hpp" #include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp" #include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <ctype.h> #include <ctype.h>
#include <stdio.h>
IplImage *image = 0, *grey = 0, *prev_grey = 0, *pyramid = 0, *prev_pyramid = 0, *swap_temp; using namespace cv;
using namespace std;
int win_size = 10; Point2f pt;
const int MAX_COUNT = 500; bool addRemovePt = false;
CvPoint2D32f* points[2] = {0,0}, *swap_points;
char* status = 0;
int count = 0;
int need_to_init = 0;
int night_mode = 0;
int flags = 0;
int add_remove_pt = 0;
CvPoint pt;
void onMouse( int event, int x, int y, int flags, void* param )
void on_mouse( int event, int x, int y, int flags, void* param )
{ {
if( !image )
return;
if( image->origin )
y = image->height - y;
if( event == CV_EVENT_LBUTTONDOWN ) if( event == CV_EVENT_LBUTTONDOWN )
{ {
pt = cvPoint(x,y); pt = Point2f((float)x,(float)y);
add_remove_pt = 1; addRemovePt = true;
} }
} }
int main( int argc, char** argv ) int main( int argc, char** argv )
{ {
CvCapture* capture = 0; VideoCapture cap;
TermCriteria termcrit(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03);
Size winSize(10,10);
const int MAX_COUNT = 500;
bool needToInit = false;
bool nightMode = false;
if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0]))) if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))
capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 ); cap.open(argc == 2 ? argv[1][0] - '0' : 0);
else if( argc == 2 ) else if( argc == 2 )
capture = cvCaptureFromAVI( argv[1] ); cap.open(argv[1]);
if( !capture ) if( !cap.isOpened() )
{ {
fprintf(stderr,"Could not initialize capturing...\n"); cout << "Could not initialize capturing...\n";
return -1; return 0;
} }
/* print a welcome message, and the OpenCV version */ // print a welcome message, and the OpenCV version
printf ("Welcome to lkdemo, using OpenCV version %s (%d.%d.%d)\n", cout << "Welcome to lkdemo, using OpenCV version %s\n" << CV_VERSION;
CV_VERSION,
CV_MAJOR_VERSION, CV_MINOR_VERSION, CV_SUBMINOR_VERSION);
printf( "Hot keys: \n" cout << "\nHot keys: \n"
"\tESC - quit the program\n" "\tESC - quit the program\n"
"\tr - auto-initialize tracking\n" "\tr - auto-initialize tracking\n"
"\tc - delete all the points\n" "\tc - delete all the points\n"
"\tn - switch the \"night\" mode on/off\n" "\tn - switch the \"night\" mode on/off\n"
"To add/remove a feature point click it\n" ); "To add/remove a feature point click it\n";
cvNamedWindow( "LkDemo", 0 ); namedWindow( "LK Demo", 1 );
cvSetMouseCallback( "LkDemo", on_mouse, 0 ); setMouseCallback( "LK Demo", onMouse, 0 );
Mat gray, prevGray, image;
vector<Point2f> points[2];
for(;;) for(;;)
{ {
IplImage* frame = 0; Mat frame;
int i, k, c; cap >> frame;
if( frame.empty() )
frame = cvQueryFrame( capture );
if( !frame )
break; break;
if( !image ) frame.copyTo(image);
{ cvtColor(image, gray, CV_BGR2GRAY);
/* allocate all the buffers */
image = cvCreateImage( cvGetSize(frame), 8, 3 );
image->origin = frame->origin;
grey = cvCreateImage( cvGetSize(frame), 8, 1 );
prev_grey = cvCreateImage( cvGetSize(frame), 8, 1 );
pyramid = cvCreateImage( cvGetSize(frame), 8, 1 );
prev_pyramid = cvCreateImage( cvGetSize(frame), 8, 1 );
points[0] = (CvPoint2D32f*)cvAlloc(MAX_COUNT*sizeof(points[0][0]));
points[1] = (CvPoint2D32f*)cvAlloc(MAX_COUNT*sizeof(points[0][0]));
status = (char*)cvAlloc(MAX_COUNT);
flags = 0;
}
cvCopy( frame, image, 0 );
cvCvtColor( image, grey, CV_BGR2GRAY );
if( night_mode ) if( nightMode )
cvZero( image ); image = Scalar::all(0);
if( need_to_init ) if( needToInit )
{ {
/* automatic initialization */ // automatic initialization
IplImage* eig = cvCreateImage( cvGetSize(grey), 32, 1 ); goodFeaturesToTrack(gray, points[1], MAX_COUNT, 0.01, 10, Mat(), 3, 0, 0.04);
IplImage* temp = cvCreateImage( cvGetSize(grey), 32, 1 ); cornerSubPix(gray, points[1], winSize, Size(-1,-1), termcrit);
double quality = 0.01; addRemovePt = false;
double min_distance = 10;
count = MAX_COUNT;
cvGoodFeaturesToTrack( grey, eig, temp, points[1], &count,
quality, min_distance, 0, 3, 0, 0.04 );
cvFindCornerSubPix( grey, points[1], count,
cvSize(win_size,win_size), cvSize(-1,-1),
cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03));
cvReleaseImage( &eig );
cvReleaseImage( &temp );
add_remove_pt = 0;
} }
else if( count > 0 ) else if( !points[0].empty() )
{ {
cvCalcOpticalFlowPyrLK( prev_grey, grey, prev_pyramid, pyramid, vector<uchar> status;
points[0], points[1], count, cvSize(win_size,win_size), 3, status, 0, vector<float> err;
cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03), flags ); if(prevGray.empty())
flags |= CV_LKFLOW_PYR_A_READY; gray.copyTo(prevGray);
for( i = k = 0; i < count; i++ ) calcOpticalFlowPyrLK(prevGray, gray, points[0], points[1], status, err, winSize,
3, termcrit, 0);
size_t i, k;
for( i = k = 0; i < points[1].size(); i++ )
{ {
if( add_remove_pt ) if( addRemovePt )
{ {
double dx = pt.x - points[1][i].x; if( norm(pt - points[1][i]) <= 5 )
double dy = pt.y - points[1][i].y;
if( dx*dx + dy*dy <= 25 )
{ {
add_remove_pt = 0; addRemovePt = false;
continue; continue;
} }
} }
...@@ -137,51 +101,44 @@ int main( int argc, char** argv ) ...@@ -137,51 +101,44 @@ int main( int argc, char** argv )
continue; continue;
points[1][k++] = points[1][i]; points[1][k++] = points[1][i];
cvCircle( image, cvPointFrom32f(points[1][i]), 3, CV_RGB(0,255,0), -1, 8,0); circle( image, points[1][i], 3, Scalar(0,255,0), -1, 8);
} }
count = k; points[1].resize(k);
} }
if( add_remove_pt && count < MAX_COUNT ) if( addRemovePt && points[1].size() < MAX_COUNT )
{ {
points[1][count++] = cvPointTo32f(pt); vector<Point2f> tmp;
cvFindCornerSubPix( grey, points[1] + count - 1, 1, tmp.push_back(pt);
cvSize(win_size,win_size), cvSize(-1,-1), cornerSubPix( gray, tmp, winSize, cvSize(-1,-1), termcrit);
cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03)); points[1].push_back(tmp[0]);
add_remove_pt = 0; addRemovePt = false;
} }
CV_SWAP( prev_grey, grey, swap_temp ); needToInit = false;
CV_SWAP( prev_pyramid, pyramid, swap_temp ); imshow("LK Demo", image);
CV_SWAP( points[0], points[1], swap_points );
need_to_init = 0;
cvShowImage( "LkDemo", image );
c = cvWaitKey(10); char c = (char)waitKey(10);
if( (char)c == 27 ) if( c == 27 )
break; break;
switch( (char) c ) switch( c )
{ {
case 'r': case 'r':
need_to_init = 1; needToInit = true;
break; break;
case 'c': case 'c':
count = 0; points[1].clear();
break; break;
case 'n': case 'n':
night_mode ^= 1; nightMode = !nightMode;
break; break;
default: default:
; ;
} }
std::swap(points[1], points[0]);
swap(prevGray, gray);
} }
cvReleaseCapture( &capture );
cvDestroyWindow("LkDemo");
return 0; return 0;
} }
#ifdef _EiC
main(1,"lkdemo.c");
#endif
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment