2011-07-04 5 views
0

マルチスケール画像、3つのサイズのIAM取引のサイズを変更します元画像の元の場所や大きさに半分の長方形&ダブル規模の連結成分はcvTransformを使用して長方形やcvGetAffineTransform OpenCVの

は、ここでは境界の矩形

 Matrix<int> src = new Matrix<int>(3, 2,3); 
     Matrix<int> dst = new Matrix<int>(3, 2,2); 

     IntPtr mat = CvInvoke.cvCreateMat(2, 3, MAT_DEPTH.CV_32F); 

     src[0,0]=componentBRect.X; 
     src[0,1]=componentBRect.Y ; 
     src[1,0]=componentBRect.Right; 
     src[1,1]=componentBRect.Y; 
     src[2,0]=componentBRect.X; 
     src[2,1]=componentBRect.Bottom; 





     CvInvoke.cvGetAffineTransform(img2, img, mat); //img is the original image & img2 has been resized to 1/2 imgWidth and 1/2 imgHeight 

     CvInvoke.cvTransform(src.Ptr, dst.Ptr, mat, IntPtr.Zero); 
のサイズを変更して再配置の私のコードです

は、DSTのポイントはresziedを取得することになっ及び を移転したが、残念ながら、同じポイントを再び返されています、私はそれが単位行列

mat= 
|1 0 0 | 
|0 1 0 | !! 

任意の提案を返すようgetAffineTransformに問題があると思います?またはアフィン変換を使用せずに、事前

答えて

1

おかげで、私は、

それを解決してきた私は、単に別の関数を見つけた私はやりたいが、別の方法である - それはcvConvertScale

 for (int i = 0; i < Brectangles.Count; i++) { 

      src[0, 0] = Brectangles[i].X; //top left 
      src[0, 1] = Brectangles[i].Y; 
      src[1, 0] = Brectangles[i].Right; //top right 
      src[1, 1] = Brectangles[i].Y; 
      src[2, 0] = Brectangles[i].X; //bottom left 
      src[2, 1] = Brectangles[i].Bottom; 


      CvInvoke.cvConvertScale(src, dst, rescaleFactor, 0); // rescaleFactor variable is 2 for half size & 0.5 for double size 

      temp.X = dst[0, 0]; 
      temp.Y = dst[0, 1]; 
      temp.Width = dst[1, 0] - dst[0, 0]; 
      temp.Height = dst[2, 1] - dst[0, 1]; 

      Brectangles[i] = temp; 


     } 

それをです長方形のサイズを変更し、適切な位置に再配置します。新しいサイズは

です
関連する問題