#include <iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv.hpp>
using namespace std;
using namespace cv;
Mat I;
Mat pI;
Point2f IPoint,pIPoint;
int i=0,j=0;
Point2f src[4];
Point2f dst[4];
void mouse_I(int event,int x,int y,int flags,void *param)
{
switch(event)
{
case CV_EVENT_LBUTTONDOWN:
IPoint=Point2f(x,y);
break;
case CV_EVENT_LBUTTONUP:
src[i]=IPoint;
circle(I,src[i],7,Scalar(0),3);
i+=1;
break;
default:
break;
}
}
void mouse_pI(int event,int x,int y,int flags,void *param)
{
switch(event)
{
case CV_EVENT_LBUTTONDOWN:
IPoint=Point2f(x,y);
break;
case CV_EVENT_LBUTTONUP:
dst[j]=pIPoint;
circle(pI,dst[i],7,Scalar(0),3);
j+=1;
break;
default:
break;
}
}
int main()
{
I=imread("/home/xiaomingming/profile/xmm.jpg",IMREAD_COLOR);
pI=255*Mat::ones(I.size(),CV_8UC1);
namedWindow("I",1);
setMouseCallback("I",mouse_I,NULL);
namedWindow("pI",1);
setMouseCallback("pI",mouse_pI,NULL);
imshow("I",I);
imshow("pI",pI);
while(!(i==4 && j==4))
{
imshow("I",I);
imshow("pI",pI);
if(waitKey(50)=='q')
break;
}
imshow("I",I);
imshow("pI",pI);
setMouseCallback("I",NULL,NULL);
setMouseCallback("pI",NULL,NULL);
Mat p=getPerspectiveTransform(src,dst);
Mat result;
warpPerspective(I,result,p,pI.size());
imshow("投影后的效果",result);
waitKey(0);
return 0;
}
OPencv用C++做投影代码
最新推荐文章于 2024-01-03 16:01:43 发布