当前位置:首页 » 图片效果 » opencv图片怎样平移
扩展阅读
怎样使win7电脑变快 2025-06-21 20:29:03
怎样使电脑开机加速 2025-06-21 20:01:35
整容脸型多少钱 2025-06-21 19:55:32

opencv图片怎样平移

发布时间: 2023-02-24 10:45:55

‘壹’ 图片处理-opencv-3.图像缩放、旋转、翻转、平移

result = cv2.resize(src, dsize[, result[. fx[, fy[, interpolation]]]])

图像旋转主要调用getRotationMatrix2D()函数和warpAffine()函数实现
M = cv2.getRotationMatrix2D(旋转中心, 旋转度数, scale)
rotated = cv2.warpAffine(原始图像, 旋转参数, 原始图像宽高)

dst = cv2.flip(src, flipCode)

图像平移首先定义平移矩阵M,再调用warpAffine()函数实现平移

M = np.float32([[1, 0, x], [0, 1, y]])

shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

‘贰’ opencv 图像旋转的问题 ,图片大小不变,怎么把图片移到中间去,图片跟框框想切

#include"StdAfx.h"

#include"cv.h"

#include"highgui.h"

#include"math.h"


intmain()

{

IplImage*src=0;

IplImage*dst=0;

/**/

if((src=cvLoadImage("d:\Image\mini.png",-1))!=0)

{

intdelta=1;

intangle=0;

intopt=0;//1:旋转加缩放

//0: 仅仅旋转

doublefactor;

dst=cvCloneImage(src);

cvNamedWindow("src",1);

cvShowImage("src",src);

for(;;)

{

floatm[6];

//Matrixmlookslike:

//

//[m0 m1 m2]===> [A11 A12 b1]

//[m3 m4 m5] [A21 A22 b2]

//

CvMatM=cvMat(2,3,CV_32F,m);

intw=src->width;

inth=src->height;

if(opt)//旋转加缩放

factor=(cos(angle*CV_PI/180.)+1.0)*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

cvZero(dst);

cvGetQuadrangleSubPix(src,dst,&M);

cvNamedWindow("dst",1);

cvShowImage("dst",dst);

if(cvWaitKey(1)==27)//ESC

break;

angle=(int)(angle+delta)%360;

}//for-loop

}

return0;

}


参考程序如上所述,如果原始图像大小不变是无法输出到原始图像的。

比如你原始图像为200*200,旋转45度,输出到一个200*200的大小的图像空间里,这个原始图片的大小已经是原来的一半成了根2*100*根2*100,你要保证角点相切的话,这个原始图像的大小需要根据旋转角度的大小随时改变。


比如旋转45度,先把源图像变到100*100(我说的源图像是里面有内容的图像),而你处理的图像还是200*200的带着黑框的图片。


进行旋转之后就是切边缘了。