【问题标题】:boundingrect not working for a contour in opencv c++boundingrect不适用于opencv c ++中的轮廓
【发布时间】:2014-10-04 02:36:04
【问题描述】:

{

 #include<opencv2\opencv.hpp>
 #include<iostream>
 #include<conio.h>

 using namespace std;
 using namespace cv;

 int main()
{
int a = 0;

Mat frame, diffimage,back,frame_gray;
VideoCapture cap("D:\\elance\\check\\Sent3.avi");
vector<vector<Point>> contours;
BackgroundSubtractorMOG2 bg;
vector<int> params;
params.push_back(CV_IMWRITE_PNG_COMPRESSION);
params.push_back(9);

for (int i = 0; i < 200;i++)
{
    cap >> frame;
    if (frame.empty())
        break;
    bg(frame,back);
}

bg.getBackgroundImage(back);
cap.set(CV_CAP_PROP_POS_FRAMES,0);
cvtColor(back, back, CV_BGR2GRAY);
//for (int f = 0; f < 20;f++)
while (1)
{
    a = a + 1;
    cout << "Frame no : " << a<<endl;
    cap >> frame;
    if (frame.empty())
        break;
    cvtColor(frame, frame_gray, CV_BGR2GRAY);
    absdiff(frame_gray, back, diffimage);
    threshold(diffimage, diffimage, 10, 255, CV_THRESH_BINARY);

    for (int i = 0; i < 2; i++)
    {
        cv::erode(diffimage, diffimage, cv::Mat());
        cv::dilate(diffimage, diffimage, cv::Mat());
    }
    findContours(diffimage, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
    cout << "Contour Size : " << contours.size()<<endl;
    vector<Rect> boundRect(contours.size());
    for (int i = 0; i < contours.size(); i++)
    {
        drawContours(frame, contours, i, cv::Scalar(0, 255, 255), 1);
        Mat smoothCont;
        smoothCont = cv::Mat(contours[i]);
        cout << smoothCont.rows << "\t" << smoothCont.cols <<"\t"<<smoothCont.depth()<< endl << endl;
        if (smoothCont.rows > 0 && smoothCont.rows < 10000)
            boundRect[i] = boundingRect(Mat(contours[i]));
    }
    for (int i = 0; i < contours.size(); i++)
        rectangle(frame, boundRect[i], Scalar(0, 255, 255), 1, 8, 0);
    imshow("Diff", diffimage);
    imshow("frame", frame);
    imwrite("D:\\test.jpg", frame, params);
    waitKey(30);
    break;
}

}

此代码基本上采用轮廓,结果是轮廓上的矩形。但是只有一个是有界的,其他轮廓仍然不是有界的。

任何人都可以在这件事上提供帮助吗?

【问题讨论】:

  • 对不起先生,现在我已经编辑了代码。谢谢
  • 从 Mat SmoothCont 我试图找到轮廓向量的行数和列数,有些轮廓是负列,你能解释一下吗?
  • 无论如何最好使用 contours[i].size()。
  • 但这仍然不能解决我的问题
  • 这段代码应该适用于多个边界框

标签: opencv visual-c++ contour


【解决方案1】:

也许“if (smoothCont.rows > 0 && smoothCont.rows

【讨论】:

  • 这个方法我试过了,但是还是不行
  • 因为函数返回的边界矩形给出了矩形坐标的负值
  • 我记得 boundingRect 需要矢量,而不是 Mat。您将其转换为 Mat 是否有特定原因?
  • 我在程序中直接使用了轮廓,但它仍然给出负值
猜你喜欢
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多