当对象靠近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<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时将帧保存到文件中的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JTable 的内容保存到文件中,然后在需要时将它们加载回来? [关闭]