0

IDE:CodeBLocks Opencv
版本:2.4.6
语言:C++

以下是黄色检测的代码,我能够成功执行。

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;


Mat GetThresholdedImage(Mat image_here)
{
Mat image_here1=image_here;
cvtColor(image_here,image_here1,CV_BGR2HSV);
inRange(image_here1, Scalar(20, 100, 100), Scalar(30, 255, 255), image_here1);
return image_here1;
}



int main(int argc, char* argv[])
{
    VideoCapture cap(0); // open the video camera no. 0

    if (!cap.isOpened())  // if not success, exit program
    {
        cout << "Cannot open the video cam" << endl;
        return -1;
    }

   double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH); //width of frames of ideo
double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //height of frames of the video
    Mat imgtrack(dWidth,dHeight,CV_8UC3);
    imgtrack.setTo(0);

    cout << "Frame size : " << dWidth << " x " << dHeight << endl;

namedWindow("MyVideo",CV_WINDOW_AUTOSIZE); //create a window called "MyVideo"

    while (1)
    {
    Mat frame;

    bool bSuccess = cap.read(frame); // read a new frame from video
    //imshow("MyVideo", frame);
    if (!bSuccess) //if not success, break loop
    {
        cout << "Cannot read a frame from video stream" << endl;
        break;
    }


     Mat imgYellowThresh=GetThresholdedImage(frame);




    imshow("MyVideo", imgYellowThresh);



   cout<<endl<<"moving to imgproc";
    cout<<"end";
    if (waitKey(30) == 27)
    {
    cout << "esc key is pressed by user" << endl;
    break;
    }
}

return 0;

}

以下是我用于跟踪黄色对象的代码。问题是它编译并成功运行,但是没有显示最终视频输出的输出窗口,程序突然结束,没有任何错误或异常等。我已经看过很多其他代码和页面,但找不到解决方案。

我使用 opencv 教程来构建我的代码。由于这里提到的代码是 C 风格的,所以我自己做了一些更改来构建 C++ 代码。 http://opencv-srf.blogspot.in/2010/09/object-detection-using-color-seperation.html

我还添加了一堆 cout 之类的“开始阈值”等来检查问题。直到一份声明cout<<"\n area if starting \n";正在打印,但其余的则没有。此外,我warning: unknown escape sequence: '\040'与声明一致cout"\n about to add\n";。由于我对图像处理和opencv都是新手,所以我不知道如何工作。

请帮忙。

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;

Mat imgtrack;
int lastX=-1;
int lastY=-1;

Mat GetThresholdedImage(Mat image_here)
{
Mat image_here1=image_here;
cvtColor(image_here,image_here1,CV_BGR2HSV);
inRange(image_here1, Scalar(20, 100, 100), Scalar(30, 255, 255), image_here1);
return image_here1;
}



int main(int argc, char* argv[])
{
    VideoCapture cap(0); // open the video camera no. 0

    if (!cap.isOpened())  // if not success, exit program
    {
        cout << "Cannot open the video cam" << endl;
        return -1;
    }

    double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH); //width of frames of ideo
    double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //height of frames of the video
    Mat imgtrack(dWidth,dHeight,CV_8UC3);
    imgtrack.setTo(0);

    cout << "Frame size : " << dWidth << " x " << dHeight << endl;

    namedWindow("MyVideo",CV_WINDOW_AUTOSIZE); //create a window called "MyVideo"

    while (1)
    {
    Mat frame;

    bool bSuccess = cap.read(frame); // read a new frame from video
    //imshow("MyVideo", frame);
    if (!bSuccess) //if not success, break loop
    {
        cout << "Cannot read a frame from video stream" << endl;
        break;
    }


    cout<<"\nstarting thresholding\n";
     Mat imgYellowThresh=GetThresholdedImage(frame);
    cout<<"\nDone Thresholding\n";



    Moments m=moments(imgYellowThresh,true);
    double moment10=m.m10;
    double moment01=m.m01;
    double area=m.m00;

    cout<<"\n area if starting\n";

    if(area>1000)
    {
    cout<<"\n inside if\n";  //not printing any cout from here on
    int posX=moment10/area;
    int posY=moment01/area;
    if(lastX>=0 && lastY>=0 && posX>=0 && posY>=0)
    {
    line(imgtrack,Point(posX,posY),Point(lastX,lastY),Scalar(255,0,0),4);
    }
    lastX=posX;
    lastY=posY;

    imshow("MyVideo", frame);


    add(frame,imgtrack,frame);


    cout<<"end";
    if (waitKey(30) == 27) 
    {
    cout << "esc key is pressed by user" << endl;
    break;
    }
}

return 0;

}
}
4

1 回答 1

0

你有没有尝试过:

  1. 降低区号
  2. 使用 find Contours 函数,然后计算最大轮廓上的矩,然后找到区域
于 2015-02-03T04:15:28.260 回答