【问题标题】:Saving a frame to file when objects are close together opencv当对象靠近opencv时将帧保存到文件中
【发布时间】:2014-03-31 12:13:57
【问题描述】:

我正在跟踪两个对象,并希望在它们彼此相距 100 以内时保存一个帧。 我使用以下方法测量距离:

bool bSavePic = false;

void example{
    int x1,y1,x2,y2;
int distance; //distance between two objects

if(initialMarkers.size()>1){
x1 = initialMarkers.at(0).getXPos();
y1 = initialMarkers.at(0).getYPos();
x2 = initialMarkers.at(1).getXPos();
y2 = initialMarkers.at(1).getYPos();

distance = (int)sqrt((double)((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)));

cv::putText(cameraFeed,intToString(distance),cv::Point(50,50),1,1,Scalar(255,0,0));

  if (distance < 100 )
        {
            bSavePic= true;
            }else{
            bSavePic= false;
        }
     }

我遇到的问题是,当它们彼此相差 100 以内时,以下代码会输出视频流,然后在标记距离再次大于 100 时保存帧。

if (bSavePic == true)
        {
            putText(cameraFeed,"Saving Image",Point(50,70),1,1,Scalar(0,0,255),1);
            waitKey(10);
            capture >> saveImage;
        }

    char buffer[1000];
    for(int c=0; c<1; c++)
        {
            sprintf(buffer,"C:\\Users\\Scott\\Documents\\Visual Studio 2010\\Projects\\MultipleObjectTracking\\Image-%d.jpg",c);
            imwrite(buffer, saveImage);             
        }

    if(!saveImage.empty())
        {
            Mat readImage;
            readImage = imread(buffer,CV_LOAD_IMAGE_COLOR);
            imshow(windowName4, readImage);
        }

关于如何在距离小于 100 时保存第一帧并且仅在距离超出 100 并返回范围内时保存另一帧的任何建议?

注意c&lt;1,因为它在距离小于 100 时保存每一帧。

【问题讨论】:

    标签: c++ file opencv save frame


    【解决方案1】:

    我用

    解决了这个问题
    bool bSingleFrame = true;
    
     int main{
    
            if (bSavePic == true)//distance<100
        {
    
            if (bSingleFrame == true)
            {
            putText(cameraFeed,"Saving Image",Point(50,70),1,1,Scalar(0,0,255),1);
            Mat saveImage;
            capture >> saveImage;
                stringstream ssFileName;                    //string stream initialised through each passing of while loop
                ssFileName << "Image-" << c << ".jpg";      //File name based on frame captured 0++
                ssFileName >> sFileName;
    
    
            if(!saveImage.empty())                          //check if frame captured is stored in matrix
            {
                cout << "Frame captured." << endl;          //if data in frame cout
                imwrite(sFileName.c_str(), saveImage);      //save frame
                saveImage.release();                        
                c++;
                if (bSavePic == true)                       //if distance still <100
                {
                    bSingleFrame = false;
                }
    
                Mat readImage;
                readImage = imread(sFileName.c_str(),CV_LOAD_IMAGE_COLOR);  
                imshow(windowName4, readImage);             //show captured frame in new window
            }else{
                cout << "Error, could not capture frame to save." << endl;
            }//if(!saveImage.empty())
            }//bSingleFrame
        }//ifbSavePic
    
        if (bSavePic == false)
                {
                    bSingleFrame = true;//if distance back >100 can capture another frame
                    }
    }
    

    请注意,这只是一个 sn-p。但它可以满足需要。

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 2017-02-18
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 2023-03-26
      • 2016-04-21
      • 1970-01-01
      • 2012-11-21
      相关资源
      最近更新 更多