C++ 当对象靠近opencv时将帧保存到文件
我正在跟踪两个对象,当它们彼此的距离在100以内时,我希望保存一帧。 Im使用以下工具测量距离:C++ 当对象靠近opencv时将帧保存到文件,c++,file,opencv,save,frame,C++,File,Opencv,Save,Frame,我正在跟踪两个对象,当它们彼此的距离在100以内时,我希望保存一帧。 Im使用以下工具测量距离: 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).g
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;
}
}
boolbsavepic=false;
无效示例{
int-x1,y1,x2,y2;
int distance;//两个对象之间的距离
如果(initialMarkers.size()>1){
x1=initialMarkers.at(0).getXPos();
y1=initialMarkers.at(0).getYPos();
x2=initialMarkers.at(1).getXPos();
y2=initialMarkers.at(1).getYPos();
距离=(int)sqrt((双)((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
cv::putText(cameraFeed,intToString(距离),cv::Point(50,50),1,1,Scalar(255,0,0));
如果(距离<100)
{
bsavpic=真;
}否则{
b视觉=假;
}
}
我遇到的问题是,当它们彼此的距离在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);
}
if(bsavpic==true)
{
putText(cameraFeed,“保存图像”,点(50,70),1,1,标量(0,0255),1);
等候室(10);
捕获>>保存图像;
}
字符缓冲区[1000];
对于(int c=0;c我用
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
}
}
boolbsingleframe=true;
int main{
如果(bSavePic==true)//距离>保存图像;
stringstream ssFileName;//通过每次传递while循环初始化的字符串流
ssFileName