360°旋转透视变换
来源:互联网 发布:通拓科技有限公司知乎 编辑:程序博客网 时间:2024/05/23 10:55
#include <opencv2/opencv.hpp>#include <stdio.h>using namespace cv;CvSize img_size;bool valid(int xx,int yy){return (xx>0 && xx<img_size.height && yy>0 && yy<img_size.width);}bool pixel_isused(CvScalar *pixel){int R=pixel->val[0];int G=pixel->val[1];int B=pixel->val[2];return !(R==205 && G==205 && B==205);}void fill(int xx,int yy,IplImage *img){int x_lower = xx-1;int x_upper = xx+1;int y_lower = yy-1;int y_upper = yy+1;CvScalar pixel_set, pixel_detect;pixel_set = cvGet2D(img, xx, yy);pixel_detect = cvGet2D(img, xx, yy+1);for (int i = 1; i <= 3; i++)if (valid(xx,yy+i)){if (!pixel_isused(&pixel_detect)){cvSet2D(img, xx, yy+i, pixel_set);//printf("%d %d DONE\n",xx,yy+1);}}/*for (int row = x_lower; row <= x_upper; row++)for (int col = y_lower; col <= y_upper; col++){pixel_detect = cvGet2D(img, row, col);if (valid(row,col)){if (!pixel_isused(&pixel_detect)){cvSet2D(img, row, col, pixel_set);printf("%d %d DONE\n",row,col);}}}*/}int main(int argc, char **argv){ IplImage *img = cvLoadImage("Test2.png");img_size.height=768;img_size.width=1024;CvScalar pixel;double factori=0;double factorj=0;int mode=0;while (1){IplImage *new_img = cvCreateImage(img_size,IPL_DEPTH_8U,3);IplImage *new_img2 = cvCreateImage(img_size,IPL_DEPTH_8U,3);//printf("%d %d\n",img->height,img->width);pixel = cvGet2D(new_img, 245, 245);//printf("B=%f,G=%f,R=%f\t", pixel.val[0], pixel.val[1], pixel.val[2]);for (int i = 0; i < img->height; ++i){for (int j = 0; j < img->width; ++j){pixel = cvGet2D(img, i, j);//printf("B=%f,G=%f,R=%f\t", pixel.val[0], pixel.val[1], pixel.val[2]);int width=img->width/2;int height=img->height/2;int axis=(img_size.width/2-width/2);double xx = 0.5*i+(img_size.height/2-height/2);double yy = j*0.5+(img_size.width/2-width/2);//(img_size.width/2-img->width/2);double yy2=2*axis-(j*0.5+(img_size.width/2-width/2));//2*axis-j*0.5+(img_size.width/2-width/2);//double yy = (2.0*j-j)/j*0.5+(img_size.width/2-img->width/2);double ww = i*factori + j*factorj + 1; //ww = a*i + b*j + 1;xx/=ww;yy/=ww;yy2/=ww;if (valid(xx,yy)){cvSet2D(new_img, (int)xx, (int)yy, pixel);fill((int)xx, (int)yy, new_img);}if (valid(xx,yy2)){cvSet2D(new_img2,(int)xx,(int)yy2,pixel);fill((int)xx, (int)yy2, new_img2);}}}if (!mode){cvNamedWindow("image");cvShowImage("image", new_img);}else{cvNamedWindow("image");cvShowImage("image",new_img2);}char c;c=cvWaitKey(0);if (!mode){//factorj+=0.0005;if (c=='s')//下factori+=0.0005;else if (c=='w')//上factori-=0.0005;else if (c=='d')//右factorj+=0.0005;else if (c=='a')//左factorj-=0.0005;else if (c=='r')//恢复factori=factorj=0;}else{//factorj-=0.0005;if (c=='s')//下factori+=0.0005;else if (c=='w')//上factori-=0.0005;else if (c=='d')//右factorj-=0.0005;else if (c=='a')//左factorj+=0.0005;else if (c=='r')//恢复factori=factorj=0;}printf("out:factor:%f mode:%d\n",factorj,mode);if (factorj>0.0005*6 || factorj<-0.0005*4){mode^=1;printf("in:factor:%f mode:%d\n",factorj,mode);}cvReleaseImage(&new_img);cvReleaseImage(&new_img2);}cvDestroyWindow("image");cvReleaseImage(&img); return 0;}
0 0
- 360°旋转透视变换
- opencv 拉伸、扭曲、旋转图像-透视变换
- 图像变换 - 图像拉伸、收缩、扭曲、旋转 - 透视变换(cvWarpPerspective)
- 图片的透视变换perspective transform——旋转矫正
- 透视变换
- 透视变换
- 透视变换
- 透视变换
- 透视变换
- 第六章 - 图像变换 - 图像拉伸、收缩、扭曲、旋转[2] - 透视变换(cvWarpPerspective)
- opencv for python (10) 图像旋转函数+仿射变换函数+透视变换
- OpenCVForUnity 透视校正,透视变换
- 透视变换---一点透视和两点透视
- Opencv 3仿射变换之缩放 平移 旋转 倾斜 反射 透视
- 仿射变换&透视变换
- cvWarpPerspective:透视变换
- 透视变换实例
- silverlight 透视变换
- win7打印机共享怎么设置 图解win7打印机共享设置技巧
- 使用maven命令创建java多模块工程
- IE故障修复之点击无反应
- 红帽与SAP合作将数据管理产品融入OpenShift平台
- 打开一个类文件时出现:Cannot open precompiled header file 的错误的解决方法
- 360°旋转透视变换
- VS2010编译Mongo C++ Driver
- Android开发中会出现R文件消失的原因。
- ubuntu64 安装jdk1.6
- linux下查看和添加PATH环境变量
- Junit测试多线程的问题
- Datatable删除行的Delete和Remove方法的区别介绍
- ffmpeg链接错误:关于C++ extern "C"
- 印制导线的宽度及间距是多少 转