图像处理经典算法及OpenCV程序(5)

2019-08-31 23:22

图像的旋转加缩放(效果很拽,用地球做就像谷歌地球似的)

#include \

#include \#include \

int main( int argc, char** argv ) {

IplImage* src;

/* the first command line parameter must be image file name */ if( argc==2 && (src = cvLoadImage(argv[1], -1))!=0) {

IplImage* dst = cvCloneImage( src ); int delta = 1; int angle = 0;

int opt = 1; // 1: 旋转加缩放 // 0: 仅仅旋转 double factor;

cvNamedWindow( \ cvShowImage( \

for(;;) {

float m[6];

// Matrix m looks like: //

// [ m0 m1 m2 ] ===> [ A11 A12 b1 ] // [ m3 m4 m5 ] [ A21 A22 b2 ] //

CvMat M = cvMat( 2, 3, CV_32F, m ); int w = src->width; int h = src->height; if(opt) // 旋转加缩放

factor = (cos(angle*CV_PI/180.) + 1.05)*2; else // 仅仅旋转 factor = 1;

m[0] = (float)(factor*cos(-angle*2*CV_PI/180.)); m[1] = (float)(factor*sin(-angle*2*CV_PI/180.)); m[3] = -m[1]; m[4] = m[0];

// 将旋转中心移至图像中间 m[2] = w*0.5f; m[5] = h*0.5f;

// dst(x,y) = A * src(x,y) + b

cvGetQuadrangleSubPix( src, dst, &M);//提取象素四边形,使用子象素精度

cvNamedWindow( \ cvShowImage( \ if( cvWaitKey(5) == 27 ) break;

angle =(int) (angle + delta) % 360; } // for-loop }

return 0; }

Log-Polar极坐标变换

原始图:

效果图:(正变换)

反变换:

正反变换只是函数中一个参数的不同,具体看你所需要的应用。

cvLogPolar函数可以用来模拟人类的中央视觉(foveal vision),并可以用于物体跟踪方面的尺度及旋转不变模板的快速匹配。 源代码:

#include

#include

int main(int argc, char** argv) {

IplImage* src;

if( argc == 2 && (src=cvLoadImage(argv[1],1)) != 0 ) {

IplImage* dst = cvCreateImage( cvSize(256,256), 8, 3 ); IplImage* src2 = cvCreateImage( cvGetSize(src), 8, 3 );

cvLogPolar( src, dst, cvPoint2D32f(src->width/2,src->height/2), 40, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS ); cvLogPolar( dst, src2,

cvPoint2D32f(src->width/2,src->height/2), 40,

CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS+CV_WARP_INVERSE_MAP ); cvNamedWindow( \ cvShowImage( \

cvNamedWindow( \ cvShowImage( \ cvWaitKey(); }

return 0; }

对图像进行形态学操作(图像的开闭,腐蚀和膨胀运算)

效果图:(什么东东长这么丑啊,汗)

#include

#include #include #include IplImage* src = 0; IplImage* dst = 0;

IplConvKernel* element = 0;

int element_shape = CV_SHAPE_RECT;

//the address of variable which receives trackbar position update int max_iters = 10;

int open_close_pos = 0; int erode_dilate_pos = 0;

// callback function for open/close trackbar void OpenClose(int pos) {

int n = open_close_pos - max_iters; int an = n > 0 ? n : -n;

element = cvCreateStructuringElementEx( an*2+1, an*2+1, an, an, element_shape, 0 ); if( n < 0 ) {

cvErode(src,dst,element,1); cvDilate(dst,dst,element,1); }


图像处理经典算法及OpenCV程序(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:论责令限期拆除的法律性质

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: