輪郭の方向を求めているOpenCVの

 

書式#include <opencv2 \ opencv.hpp>
 使用して 名前空間の品種;
使用して 名前空間はstdを、

二重 calcPCAorientation(ベクトル<ポイント>・PTS、マット&画像)。

INTメイン(int型アーク、チャー ** ARGV)
{ 
    マットSRC =関数imread(" 3.JPG " )。
    namedWindow(" 入力" 、WINDOW_AUTOSIZE)。
    関数imshow(" 入力" 、SRC); 
    バイナリ、グレイマット。
    cvtColor(SRC、灰色、COLOR_BGR2GRAY)。
    閾値(灰色、バイナリ、0255、THRESH_BINARY | THRESH_OTSU);
    // 関数imshow( "バイナリ"、バイナリ); 

    ベクトル <ベクトル<ポイント>> 輪郭。
    findContours(バイナリ、輪郭、RETR_LIST、CHAIN_APPROX_NONE)。
    マット結果 = src.clone()。
    以下のためにINT iが= 0 ; I <contours.size(); I ++ ){
         二重面積= contourArea(輪郭[I])。
        もし(エリア> 1E5 ||エリア<1E2)続けます
        drawContours(その結果、輪郭、I、スカラー(00255)、1 )。
        calcPCAorientation(輪郭[i]は、結果)。
    } 
    関数imshow(" 結果" 、結果)。

    waitKey(0 )。
    リターン 0 ; 
} 

二重 calcPCAorientation(ベクトル<ポイント>・PTS、マット&画像)
{ 
    int型のサイズ= pts.size()。
    マットdata_pts =マット(サイズ、2 、CV_64FC1)。
    以下のためにINT iが= 0 ; I <サイズ; I ++ ){ 
        data_pts.at < ダブル >(I、0)= < PTS [I] .X。
        data_pts.at二重 >(I、1)= PTS [I] .Y。
    } 
    // PCA 
    PCAのpca_analysis(data_pts、マット()、PCA :: DATA_AS_ROW)。
    点CNT =点(pca_analysis.mean.at < ダブル >(00)、pca_analysis.mean.at < ダブル >(01))。// 平均值 
    円(画像、CNT、2、スカラー(02550)、2 )。

    ベクター <たPoint2D> vecSの(2)。// 特征向量 
    ベクトル<ダブル >ヴァルス(2)。// 特征值
    ためINT iは= 0 ; I < 2 ; I ++ 
    { 
        ヴァルス[I] = pca_analysis.eigenvalues.at < ダブル >(I、0 ); 
        vecSの[I] =たPoint2D(pca_analysis.eigenvectors.at < ダブル >(I、0)、pca_analysis.eigenvectors.at < ダブル >(I、1 ))。
    } 
    ポイントP1 = CNT +ポイント(static_castを< 整数 >(vecSの[ 0 ] .X * 320)、static_castを< INT>(vecSの[ 0 ]・Y * 315)); // 元々 300 
    ポイントP2 = CNT -ポイント(static_castを< INT [>(vecSの1 ] .X * 100)、static_castを< 整数 >(vecSの[ 1 ]。 * Y 100)); // 50の
     // データは、次の元の今後の新しいセットグループ内のデカルト座標系を表し、データは、最大にすることを特徴とする 
    (ラインイメージ、CNT、P1、スカラー(25500) 、1); // 主方向請求 
    ライン(イメージ、CNT、P2、スカラー(02550)、1); //前記メイン垂直
    ダブル ATAN2 =の角度(vecSの[ 0 ] .Y、vecSの[ 0 ] .X); 
    のprintf(" 角度:%2F \ N- "180 *角度/ CV_PI); 
    のprintf(" %のD、 D%\ N- "、ヴァルス[ 0 ]、ヴァルス[ 1 ]);
     戻り角度を、
}

 

おすすめ

転載: www.cnblogs.com/hsy1941/p/12001962.html