Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cv.h>
- #include <highgui.h>
- #include "opencv2/legacy/legacy.hpp"
- #include <iostream>
- #include <opencv2/core/core.hpp>
- #include <opencv2/highgui/highgui.hpp>
- int
- main (int argc, char **argv)
- {
- char *status;
- int i, corner_count = 150;
- CvPoint2D32f *corners1, *corners2;
- CvTermCriteria criteria;
- IplImage *src_img1, *src_img2, *dst_img;
- IplImage *eig_img, *temp_img;
- IplImage *prev_pyramid, *curr_pyramid;
- if (argc != 4 ||
- (src_img1 = cvLoadImage (argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0 ||
- (src_img2 = cvLoadImage (argv[2], CV_LOAD_IMAGE_GRAYSCALE)) == 0)
- return -1;
- dst_img = cvLoadImage (argv[2], CV_LOAD_IMAGE_COLOR);
- cv::Mat white_img(cv::Size(640, 480), CV_8UC3, cv::Scalar::all(255));
- // (1)必要な構造体の確保
- eig_img = cvCreateImage (cvGetSize (src_img1), IPL_DEPTH_32F, 1);
- temp_img = cvCreateImage (cvGetSize (src_img1), IPL_DEPTH_32F, 1);
- corners1 = (CvPoint2D32f *) cvAlloc (corner_count * sizeof (CvPoint2D32f));
- corners2 = (CvPoint2D32f *) cvAlloc (corner_count * sizeof (CvPoint2D32f));
- prev_pyramid = cvCreateImage (cvSize (src_img1->width + 8, src_img1->height / 3), IPL_DEPTH_8U, 1);
- curr_pyramid = cvCreateImage (cvSize (src_img1->width + 8, src_img1->height / 3), IPL_DEPTH_8U, 1);
- status = (char *) cvAlloc (corner_count);
- criteria = cvTermCriteria (CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 64, 0.01);
- // (2)疎な特徴点を検出
- cvGoodFeaturesToTrack (src_img1, eig_img, temp_img, corners1, &corner_count, 0.001, 5, NULL);
- // (3)オプティカルフローを計算
- cvCalcOpticalFlowPyrLK (src_img1, src_img2, prev_pyramid, curr_pyramid,
- corners1, corners2, corner_count, cvSize (10, 10), 4, status, NULL, criteria, 0);
- // (4)計算されたフローを描画
- /* for (i = 0; i < corner_count; i++) {
- if (status[i])
- cvLine (white_img, cvPointFrom32f (corners1[i]), cvPointFrom32f (corners2[i]), CV_RGB (255, 0, 0), 1, CV_AA, 0);
- }
- cvNamedWindow ("Image", 1);
- cv::imshow ("Image", white_img);
- cvWaitKey (0)
- */
- // (4)計算されたフローを描画
- for (i = 0; i < corner_count; i++) {
- if (status[i])
- cv::line(white_img, cv::Point(corners1[i]), cv::Point(corners2[i]), cv::Scalar(255, 0, 0), 10, CV_AA);
- //cvLine (white_img, cvPointFrom32f (corners1[i]), cvPointFrom32f (corners2[i]), CV_RGB (255, 0, 0), 1, CV_AA, 0);
- }
- cvNamedWindow ("Image", 1);
- cvShowImage ("Image", white_img);
- //cv::imwrite(argv[3],white_img);
- cv::imshow ("Image", white_img);
- cvWaitKey (0);
- cvDestroyWindow ("Image");
- cvReleaseImage (&src_img1);
- cvReleaseImage (&src_img2);
- cvReleaseImage (&dst_img);
- cvReleaseImage (&eig_img);
- cvReleaseImage (&temp_img);
- //cvReleaseImage (&white_img);
- cvReleaseImage (&prev_pyramid);
- cvReleaseImage (&curr_pyramid);
- //imwrite(argv[3],white_img);
- cvSaveImage(argv[3],white_img);
- return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement