#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 這個我還是不明白!
回覆刪除