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
| #include "stdafx.h" #include "opencv.hpp" #include "highgui.h"
void mouse_callback(int event, int x, int y, int flags, void* param);
int _tmain(int argc, _TCHAR* argv[]) { cv::Mat img = cv::imread("E:\\113.jpg"); cv::Size imgSize = img.size();
cv::vector<cv::Point2f> corners; cv::namedWindow("View", CV_WINDOW_NORMAL); cv::resizeWindow("View", 600, 1000);
cv::setMouseCallback("View", mouse_callback, (void*)&corners);
cv::imshow("View", img); cvWaitKey(0);
cv::Point2f src[4]; cv::Point2f dst[4];
for(int i=0; i<4; i++) { src[i] = corners[i]; }
dst[0].x = 0; dst[0].y = 0; dst[1].x = imgSize.width-1; dst[1].y = 0; dst[2].x = imgSize.width-1; dst[2].y = imgSize.height-1; dst[3].x = 0; dst[3].y = imgSize.height-1;
cv::Mat dstImg = img;
cv::Mat warpMat = cv::getPerspectiveTransform(src, dst); cv::warpPerspective(img, dstImg, warpMat, imgSize);
cv::namedWindow("Viewdst", CV_WINDOW_NORMAL);
cv::imshow("Viewdst", dstImg); cvWaitKey(0);
cv::destroyAllWindows(); return 0; }
void mouse_callback(int event, int x, int y, int flags, void* param) { cv::vector<cv::Point2f> *corners = (cv::vector<cv::Point2f>*) param;
switch(event) { case CV_EVENT_LBUTTONDOWN: { if(corners->size() == 4) break; corners->push_back(cv::Point(x, y)); break; } } }
|