2

Matlab の regionprop(BW,'Area') が OpenCV で行うことを模倣する必要があります。

私はこのコードをMatlabに持っています

[L,N]           = bwlabel(image1,8);
S = regionprops(L,'Area','PixelIdxList');
output=[];
for i=1:N,
    output(i)=S(i).Area;
end

そしてOpenCVで

cv::findContours(cvImageMat,contours,CV_RETR_LIST,CV_CHAIN_APPROX_NONE);
int iNumSegments = contours.size();
for(int i=0;i<iNumSegments;i++) 
{
    cv::vector<cv::Point> approx;
    cv::approxPolyDP(cv::Mat(contours[i]), approx, 1.0e-10, true);
    double area = fabs( cv::contourArea( approx ) );
    dvResult.push_back(area);
}

ただし、2048 x 2048 サイズの画像の場合、計算された 2 つの領域間のそれぞれの差は約 400 です。私が前進するためには、それらは同じでなければなりません。これについて誰かアドバイスはありますか?

4

1 に答える 1

1

独自の関数を作成することになりました。

double cvArea(cv::Mat mat, cv::vector<cv::vector<cv::Point>> &contours, int index)
{
    cv::Mat mask = cv::Mat::zeros(mat.cols,mat.rows,CV_8UC1);
    cv::drawContours(mask,contours,index,cv::Scalar(1),CV_FILLED);
    return cv::sum(mask).val[0];
}
于 2012-10-04T17:35:54.647 に答える