使用OpenCV过滤图像

时间:2015-03-01 15:56:45

标签: c++ visual-studio opencv image-processing

我对编程很陌生。并且我想制作能够从小物体和非凸物体中滤除图像的程序,因此只留下诸如矩形,三角形,圆形等的形状。 到目前为止我做了什么?

我设法通过两种不同的方式(颜色检测和canny函数)获取二进制图像然后我用函数findContours创建了轮廓。所以这是完美无瑕的。

这是代码:

vector<Point> approxShape;
vector<vector<Point>> FiltredContours;
vector<vector<Point>> TRI; 
vector<vector<Point>> RECT; 
vector<vector<Point>> PENTA;

Mat WSO= Mat::zeros(im.size(), CV_8UC3); //Without Small Objects

for ( int j = 0; j < contours.size(); j++)
{
    if ((fabs(contourArea(contours[j]))) >100)
        drawContours(WSO, contours, j,Scalar(128,128,128),2,8,hiearchy,0, Point()); // to see how it looks before it goes further

    {                   
        approxPolyDP( Mat(contours[j]), approxShape, arcLength(Mat(contours[j]), true) * 0.02, true);

        if (isContourConvex(approxShape))           
        {
            FiltredContours.push_back(approxShape); 
        }
    }
}

///--------Show image after filtring small obj. -----
imshow("WSO",WSO);

////--------Filtred-Image-Drawing---------------------
Mat approxmat = Mat::zeros(imHSV.size(),CV_8UC3);
drawContours(approxmat, FiltredContours, -1,barva,2,8,hiearchy,0, Point());//drawContours(approxkresba, FiltredContours, -1,Scalar(255, 0, 0),2,8,hiearchy,0, Point());

namedWindow("Filtred objects",CV_WINDOW_AUTOSIZE);
imshow("Filtred objects",approxmat);

我也尝试更改contourAreaapproxPollyDP中的参数。它仍然不像我想象的那样工作。

0 个答案:

没有答案