2016-12-14 12 views
0

私は画像処理と開発に新規です。黒い背景に三角形があります。私はその三角形を黒のピクセルなしのMatオブジェクトとして保存したい[0]。私は以下のように試みました。crop triangle from blackbackground

  1. 設定閾値
  2. の輪郭を見つける
  3. 輪郭を識別する[0] trangle //として2つの輪郭を有するものは、三角形、他の一つはbackpixelsあります。
  4. 輪郭点を保存する
  5. 画像を切り抜く。

マイコードは下記をご覧ください。

Mat finalImage = imread("test.png, CV_LOAD_IMAGE_GRAYSCALE); 

     img.copyTo(finalImage, mask); 

     Mat canny_output; 
     vector<vector<Point> > contours; 
     vector<Vec4i> hierarchy; 
     int thresh = 100; 
     int max_thresh = 255; 
     RNG rng(12345); 

     /// Detect edges using canny 
     Canny(finalImage, canny_output, thresh, thresh * 2, 3); 
     /// Find contours 
     findContours(canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); //find this method 

     /// Draw contours 
     Mat drawing = Mat::zeros(canny_output.size(), CV_8UC1); 
     for (int i = 0; i< contours.size(); i++) 
     { 
      Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); 
      drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, Point()); // find this method. 
     } 

Iは、輪郭の点を有するが、輪郭の点を用いてiが入力画像のみtrangle をトリミングする方法は考えています。

image

+1

:だからあなたのあなたが輪郭を反復しているループのために、あなたはように、それぞれの輪郭のバウンディングのRectを取得するためにcv::boundingRect()を使用することができます。 1)画像**は矩形**でなければならないということについてはっきりしていないので、三角形の画像を持つことはできません。 2)長方形の画像では、**アルファチャンネルをマスク**として使用できます。たとえば、三角形の外側のすべてのピクセルを透明に設定しますか? – Miki

+1

三木が正しいです、画像は三角形ではありません。正確に何が必要なのかを詳しく教えてください。 –

答えて

0

あなたが輪郭を描く再していると同時に、様々な輪郭のバウンディングのRectを取得することができます。あなたは既にこの質問を数回尋ね

/// Draw contours 
Mat drawing = Mat::zeros(canny_output.size(), CV_8UC1); 
for (int i = 0; i< contours.size(); i++) 
    { 
     Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); 
     drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, Point()); // find this method. 
     cv::Rect boundingRect = cv::boundingRect(contours[i]); 
    } 
+0

しかし、この方法は四角形の内側に三角形を与えます。矩形は黒色のピクセルを持つ。私は三角形だけを分離したい – Alan

+0

次に期待される出力を添付してください。 – ZdaR