分块仿射变换
来源:互联网 发布:java ajax post 跨域 编辑:程序博客网 时间:2024/04/28 13:48
#include "stdafx.h" #include <opencv2/video/video.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp> #include <fstream> #include <iostream> #include <cstdio> #include "features2d/features2d.hpp" using namespace std; using namespace cv; vector<Point2f> features; // 检测的特征 int maxCount = 500; // 检测的最大特征数 double qLevel = 0.01; // 特征检测的等级 double minDist = 10.0; // 两特征点之间的最小距离 vector<uchar> status; // 跟踪特征的状态,特征的流发现为1,否则为0 vector<float> err; void on_mouse( int event, int x, int y, int flags, void* ustc); bool acceptTrackedPoint(int i); void main(){ Mat output,origin; Mat image=imread("G:\\6.jpg",0); Mat image2=imread("G:\\10.jpg",0);Mat result=imread("G:\\6.jpg",0); Mat resutl=imread("G:\\10.jpg",0); origin=imread("G:\\6.jpg",1); output=imread("G:\\10.jpg",1); int m=1; //Mat imageROI1=image(Rect(0,90,160,45));//Mat imageROI2=image2(Rect(0,90,160,45));Mat imageROI1[4][8];Mat imageROI2[4][8];//Mat resultROI[4][8];Mat result1ROI[4][8];for(int k=0;k<4;k++)//行for(int t=0;t<8;t++){//列imageROI1[k][t]=image(Rect(80*t,45*k,80,45));imageROI2[k][t]=image2(Rect(80*t,45*k,80,45));result1ROI[k][t]=resutl(Rect(80*t,45*k,80,45));Mat warp_mat( 2, 3, CV_32FC1 );Mat warp_dst;vector<Point2f> points[2]; // point0为特征点的原来位置,point1为特征点的新位置/** * 提取像素点 */for(int j=0;j<imageROI1[k][t].rows;j+=15)//列for(int i=0;i<imageROI1[k][t].cols;i+=15)//行{points[0].push_back(Point2f(i,j));}//检测第二帧对应特征点 calcOpticalFlowPyrLK(imageROI1[k][t], imageROI2[k][t], points[0], points[1], status, err);//根据两帧之间特征点矢量长度去掉一些不好的特征点 int kk = 0; for (size_t i=0; i<points[1].size(); i++) { if (acceptTrackedPoint(i)&&((abs(points[0][i].x - points[1][i].x) + abs(points[0][i].y - points[1][i].y)))<20) { points[0][kk]=points[0][i]; points[1][kk++] = points[1][i]; } } points[1].resize(kk); points[0].resize(kk);//cout<<m++<<endl;//cout<<points[0]<<endl;//cout<<points[1]<<endl;if(points[0].size()>=3&&points[1].size()>+3){cout<<points[0].size()<<endl;cout<<points[1].size()<<endl;warp_mat=estimateRigidTransform(points[1],points[0],1);//求出仿射变换矩阵warpAffine( imageROI2[k][t], warp_dst, warp_mat, warp_dst.size() );//进行仿射变换//absdiff(imageROI1[k][t],warp_dst,result);//进行差分运算//absdiff(imageROI1[k][t],imageROI2[k][t],result1ROI[k][t]);//进行差分运算warp_dst.copyTo(imageROI2[k][t]);}} /*for (size_t i=0; i<points[1].size(); i++) { line( imageROI2[k][t], points[0][i], points[1][i], Scalar(0, 255, 255)); circle( imageROI2[k][t], points[0][i], 2, Scalar(255, 0, 0), -1); circle( imageROI2[k][t], points[1][i], 2, Scalar(0, 255, 0), -1); cout<<(abs(points[0][i].x - points[1][i].x) + abs(points[0][i].y - points[1][i].y))<<endl; } */ ////// for (size_t i=0; i<points[0].size(); i++) // { // circle(origin, points[0][i], 2, Scalar(255, 0, 0), -1); // } ///////*画网格线*/line(image2, Point(0,45), Point(640,45), Scalar(255, 255, 0)); line(image2, Point(0,90), Point(640,90), Scalar(255, 255, 0));line(image2, Point(0,135), Point(640,135), Scalar(255, 255, 0));for(int i=0;i<640;i+=80){line(image2, Point(i,0), Point(i,180), Scalar(255, 255, 0));} /* imshow("origin1",origin); imshow("output1",output); cvSetMouseCallback( "output", on_mouse, 0 ); cvSetMouseCallback( "origin", on_mouse, 0 ); */ //imshow("original",imageROI1);//imshow("output",imageROI2); // imshow("仿射变换",warp_dst);; imshow("仿射帧间差",image); imshow("直接帧间差1",image2); waitKey(0); // } bool acceptTrackedPoint(int i) { // return status[i] && ((abs(points[0][i].x - points[1][i].x) + abs(points[0][i].y - points[1][i].y)) <50)&& ((abs(points[0][i].x - points[1][i].x) + abs(points[0][i].y - points[1][i].y)) > 0); return status[i] ; } void on_mouse( int event, int x, int y, int flags, void* ustc) { CvFont font; cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA); if( event == CV_EVENT_LBUTTONDOWN ) { CvPoint pt = cvPoint(x,y); char temp[16]; sprintf(temp,"(%d,%d)",pt.x,pt.y); cout<<temp<<endl; } }
0 0
- 分块仿射变换
- 暂时备份(全方位分块仿射变换)
- 仿射变换&透视变换
- 几何变换 -- 仿射变换
- 【翻译】仿射变换
- 仿射变换
- 仿射变换
- 仿射变换
- 仿射变换
- 仿射变换
- 仿射变换
- 仿射变换
- 仿射变换
- cvWarpAffine:仿射变换
- 仿射变换
- 关于仿射变换
- 仿射变换
- 仿射变换
- 2014年暑假总结——在困难中成长
- .NET进阶——浅谈ORM的映射方案
- 工作生活——思考
- 二叉树的简介
- 告诉我图样图森破的两道简单C++笔试题
- 分块仿射变换
- linux配置ssh使用证书免输入密码登陆服务器
- 一大波待整理的思绪
- 范德萨发的说法萨顶顶
- http://travel.tianya.cn/travelPlan/showPlan?planId=2981692
- lambada表达式
- POJ2945——Find the Clones
- 第三方的说法撒的撒的撒
- c++中new和delete修饰符与malloc和free函数的区别