#include
#include
#include "cv.h" // include core library interface
#include "highgui.h" // include GUI library interface
void CMainFrame::OnResize()
{ IplImage * img = NULL; //建立一IplImage之指標變數並設值為NULL
IplImage * pImage = NULL; //建立一IplImage之指標變數並設值為NULL
IplImage * pImgNew = NULL; //建立一IplImage之指標變數並設值為NULL img=cvLoadImage("img.jpg"); //從img.jpg讀入圖片
pImage = cvCloneImage(img); //複製一份img
CFileDialog dlg(TRUE,_T("*.bmp"),"",OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,"image files(*.bmp;*.jpg)|*,bmp;*.jpg|AVI files(*.avi)|*.avi|All Files(*.*)|*.*||",NULL);
char title[]={"Open Image again"};
dlg.m_ofn.lpstrTitle = title;
if(dlg.DoModal() == IDOK)
{
imgfilepath = dlg.GetPathName();
if(pImgNew != 0)
cvReleaseImage(&pImgNew); ///把pImaNew之圖片釋放
pImgNew = cvvLoadImage(imgfilepath); //載入第二幅圖像
cvvNamedWindow("Second Image",1); //創立並顯示第二幅圖象名稱為Second Image
cvvShowImage("Second Image",pImgNew); //顯現出pImgNew的圖片
/*以cvv開頭的是highgui的函數。為了用ImageProcessor,將此頭文件包入對話框。一旦文件打開,一個ImageProcessor的實例即被創建*/
}
cvResize(pImage,pImgNew,CV_INTER_NN);
cvvNamedWindow("Resized Image",1); //創立視窗名稱為Resized Image
cvvShowImage("Resized Image",pImgNew); //顯現出pImgNew的圖片
cvWaitKey(0); //等待key按下之時間(<=0為無線等待)
cvReleaseImage(&pImage); //把pImage之圖片釋放
cvReleaseImage(&pImgNew); //把pImaNew之圖片釋放
cvDestroyWindow("Second Image"); //銷毀Second Image窗口
cvDestroyWindow("Resized Image"); //銷毀Resized Image窗口
}
void CMainFrame::OnRotation()
{
int angle = 30; //設定旋轉角度三十度
int opt = 0; //=1加縮放 =0 僅旋轉
double factor; //宣告factor
IplImage * img = NULL; //建立一IplImage之指標變數並設值為NULL
IplImage * pImage = NULL; //建立一IplImage之指標變數並設值為NULL
IplImage * pImgRotation = NULL; //建立一IplImage之指標變數並設值為NULL
img=cvLoadImage("img.jpg"); //從img.jpg讀入圖片
pImage = cvCloneImage(img); //複製一份img
pImgRotation = cvCloneImage(img); //複製一份img
float m[6]; //創立矩陣m
CvMat M = cvMat(2,3,CV_32F,m);
int w = img->width; //將w指向長
int h = img->height; //將h指向寬
if(opt==1) factor = (cos(angle * CV_PI/180.) + 1.0)*2; //旋轉+縮放
else factor = 1; //僅旋轉
//旋轉 x′= rcos(θ+α)= rcosαcosθ- rsinθsinα
m[0] = (float)(factor * cos(-angle * CV_PI/180.));
m[1] = (float)(factor * sin(-angle * 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(pImgRotation);
cvGetQuadrangleSubPix(pImage,pImgRotation,&M);
cvNamedWindow("Rotation Image",1); //創立視窗名稱為Rotation Image
cvShowImage("Rotation Image",pImgRotation); //顯示pImgRotation圖片
cvWaitKey(0); //等待key按下之時間(<=0為無線等待)
cvReleaseImage(&pImage); //把pImage之圖片釋放
cvReleaseImage(&pImgRotation); //把pImgRotation e之圖片釋放
cvDestroyWindow("Rotation Image"); //銷毀Rotation Image窗口
}
/*
(所使用之openCV函數):
1. cvCloneImage:複製一份image
2. cvCreatImage:創造一份image
3. cvCvtcolor:把輸入之圖片轉成灰階後輸出
4. cvvNamedWindow:創立視窗的名稱
5. cvvShowImage:秀出image
6. cvDestoryWindow:銷毀視窗
7. cvReleaseimage:釋放圖片
8. cvGetQuadrangleSubPix:從圖像中src提取四邊形,使用子精像度精度,將結果存於dst
*/
有文字檔和程式碼
回覆刪除webhd: CV_Ch6
關於旋轉的這段
回覆刪除if(opt) factor = (cos(angle * CV_PI/180.) + 1.0)*2; //旋轉+縮放
else factor = 1;
m[0] = (float)(factor * cos(-angle * CV_PI/180.));
m[1] = (float)(factor * sin(-angle * CV_PI/180.));
m[3] = -m[1];
m[4] = m[0];
m[2] = w*0.5f;
m[5] = h*0.5f;
cvZero(pImgRotation);
cvGetQuadrangleSubPix(pImage,pImgRotation,&M);
這段不是很懂
CFileDialog 這個我還是不明白!
回覆刪除