在OpenCV環境下寫的兩個影象平移C和C++原始碼!
阿新 • • 發佈:2019-02-08
平像平移的概念就不用多說了,直接上經實測無誤的程式碼吧!
原始碼一(C程式設計,不用MAT類)
#include <opencv2/opencv.hpp> #include <opencv2/legacy/compat.hpp> #include <fstream> using namespace std; #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //該函式的功能是實現影象的平移 //規定向下、向右為(正,正) IplImage *moveImage(IplImage *src,int h0,int w0) { int h=h0; int w=w0; int imageHeight=src->height; int imageWidth=src->width; int i,j; CvScalar sTemp; IplImage *dst=cvCloneImage(src); cvSetZero(dst); if (h>=0 && w>=0) { // for (i=0;i<imageHeight-h;i++) { for (j=0;j<imageWidth-w;j++) { sTemp=cvGet2D(src,i,j); cvSet2D(dst,i+h,j+w,sTemp); } } } else if (h<0 && w>=0) { for (i=-h;i<imageHeight;i++) { for (j=0;j<imageWidth-w;j++) { sTemp=cvGet2D(src,i,j); cvSet2D(dst,i+h,j+w,sTemp); } } } else if (h>=0 && w<0) { // for (i=0;i<imageHeight-h;i++) { for (j=-w;j<imageWidth;j++) { sTemp=cvGet2D(src,i,j); cvSet2D(dst,i+h,j+w,sTemp); } } } else if (h<0 && w<0) { for (i=-h;i<imageHeight;i++) { for (j=-w;j<imageWidth;j++) { sTemp=cvGet2D(src,i,j); cvSet2D(dst,i+h,j+w,sTemp); } } } else { printf("cannot move!"); dst=cvCloneImage(src); } return dst; } int main(void) { IplImage* pImg; //宣告IplImage指標 IplImage* pImgAfterMove; pImg=cvLoadImage("lena.jpg"); pImgAfterMove=cvCloneImage(pImg); cvSetZero(pImgAfterMove); pImgAfterMove=moveImage(pImg,100,-100); cvNamedWindow("原影象",CV_WINDOW_AUTOSIZE); cvShowImage("原影象",pImg ); cvNamedWindow("平移之後的影象",CV_WINDOW_AUTOSIZE); cvShowImage("平移之後的影象",pImgAfterMove); cvWaitKey(0); //等待按鍵 cvDestroyWindow( "原影象" );//銷燬視窗 cvDestroyWindow( "平移之後的影象" ); cvReleaseImage( &pImg ); //釋放影象 cvReleaseImage( &pImgAfterMove ); return 0; }
程式執行結果如下圖所示:
影象處理開發資料、影象處理開發需求、影象處理接私活掙零花錢,可以搜尋公眾號"qxsf321",並關注!
影象處理開發資料、影象處理開發需求、影象處理接私活掙零花錢,可以搜尋公眾號"qxsf321",並關注!
影象處理開發資料、影象處理開發需求、影象處理接私活掙零花錢,可以搜尋公眾號"qxsf321",並關注!