當前位置:首頁 » 圖片效果 » opencv圖片怎樣平移

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的帶著黑框的圖片。


進行旋轉之後就是切邊緣了。