0

輪郭内のピクセル ポイントを見つけるにはどうすればよいですか? 実行後に 5 つの輪郭を持つ画像があるとします。関数findContoursを使用して輪郭を描画できることはわかってdrawContourいますが、輪郭を形成するピクセル ポイントを知る必要があります。

例えば:

    cv::medianBlur(img1,img1,7);
    Canny(src1,img1,250,350,3);
    imshow("abc",img1);

    vector< vector<Point> > contours;
    findContours(img1, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);

    for(int i=0;i<contours.size();i++){         
    cv::drawContours(src2,contours,i,Scalar(255,100,200),2);
}

私はこれを行い、この画像を取得しました。たとえば(x1,Y1)、輪郭を形成するピクセルポイントを取得したいのですが、これらの情報を取得するに(x2,y2)...どうすればよいですか? ここ

4

2 に答える 2

2

コードに自分で書いたように、変数contoursvector< vector<Point> >点のベクトルの : ベクトルです。つまり、すべての輪郭は点のベクトルです。

これは、contours[0]ポイントの 1 つのベクトル (0 番目の等高線に対応する)contours[1]を提供し、ポイントの別のリストを提供することを意味します。

于 2014-10-10T09:45:29.897 に答える
1

輪郭は の 2DvectorですPoint。したがって、各ポイントにアクセスするには、以下に示すように、2 つforのループを使用できます (コードは、各ポイントの xy 座標を等高線 ID と共に表示します)。

for(int i = 0; i < contours.size; i++)
    for(int j = 0; i < contours.size; j++)
        cout << "ID = " << i << "( " << contours[i][j].x 
            << " , " << contours[i][j].y << " )"<< endl;

approxPolyDPを使用してデータをより適切に視覚化することにより、等高線の点の数を実際に減らすことができます。こちらのドキュメントを確認してください。

于 2014-10-10T10:16:41.123 に答える