0

画像操作を行ってマスクを適用すると、必要なものが得られます。「クロップ」のimshow結果で、画像の中央に灰色のピクセルがあることがはっきりとわかります。最大ピクセル値の場所を取得しようとしています。1 を返す crop.channels() を確認しました。

    Mat mask = drawing2;
    drawContours(mask, contours, -1, Scalar(255), CV_FILLED);
    Mat dist;
    distanceTransform( cannyInv, dist, CV_DIST_L2, 3 );
    normalize(dist,dist,0.0,1.0,NORM_MINMAX);
    Mat crop;
    dist.copyTo(crop, mask);
    cout << "max.. "<< *std::max_element(crop.begin<double>(),crop.end<double>()) <<endl;

最大を返します.. 4.25593e-08

    for(int y = 0; y < crop.rows; y++)
    {
        for(int x = 0; x < crop.cols; x++)
        {
            if (crop.at<unsigned char>(x,y) > 0){      
                cout << "X........"<<x<<" Y......"<<y<< " = "<<crop.at<unsigned char>(x,y) <<endl;
            }
        }
    }

出力は次のとおりです。

X........604 Y......479 = ¿
X........607 Y......479 =   
X........610 Y......479 = ¿

お願い助けて

PD: 同様の質問があることは知っています。しかし、これは特定の問題です。

4

3 に答える 3

1

どうやって解決したのかわかりません。多くの時間が経過しました。しかし、現在私が持っていて動作するコードは次のとおりです。

    Mat dist=Mat::zeros(480,640, CV_8UC1);;
    distanceTransform( cannyInv, dist, CV_DIST_L2, 3 );
    Mat distNorm;
    dist.convertTo(distNorm, CV_8UC1,1,0);
    Mat result= Mat::zeros(480,640, CV_8UC1);
    distNorm.copyTo(result, mask);
    Mat tmp=Mat::zeros(480,640, CV_8UC1);
    Mat fik=Mat::zeros(480,640, CV_8UC3);
    for(int i = 0; i < result.rows; i++)
    {
        for(int j = 0; j < result.cols; j++)
        {
            if ( result.at< uchar >( i,j ) > 0){
                uchar val = result.at< uchar >( i,j  );
                if(val>maxVal){
                    if(val>0){
                        cv::circle(tmp,cvPoint(j,i),2,255,-1);
                    }
                    maxVal=val;
                    maxX = j;
                    maxY = i;
                }
            }
        }
    }
于 2013-07-03T16:38:05.290 に答える
0

マットを正規化すると、自動的にucharからdoubleに変換されますか?データがまだucharとして保存されており、そこから間違った数値を読み取っている可能性があります。

dist.convertTo(dist、CV_64F);を試してください。どこでも2倍として数字を印刷する

または、ucharのみを使用します。

于 2013-01-13T21:08:16.710 に答える