当对象靠近opencv时将帧保存到文件中

Posted

技术标签:

【中文标题】当对象靠近opencv时将帧保存到文件中【英文标题】:Saving a frame to file when objects are close together 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 时保存每一帧。

【问题讨论】:

【参考方案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。但它可以满足需要。

【讨论】:

以上是关于当对象靠近opencv时将帧保存到文件中的主要内容,如果未能解决你的问题,请参考以下文章

使用opencv将视频写入文件时遇到问题

我应该将帧转换为啥格式以在openCV中使用

如何将帧写入视频文件?

如何将 JTable 的内容保存到文件中,然后在需要时将它们加载回来? [关闭]

如何将任意 Ruby 对象保存到磁盘并在必要时将其读回? [关闭]

Openc的基础数据类型(学习第二天)