本文整理汇总了C++中cv::VideoCapture::retrieve方法的典型用法代码示例。如果您正苦于以下问题:C++ VideoCapture::retrieve方法的具体用法?C++ VideoCapture::retrieve怎么用?C++ VideoCapture::retrieve使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类cv::VideoCapture
的用法示例。
在下文中一共展示了VideoCapture::retrieve方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: readFrameIndex
cv::Mat readFrameIndex(cv::VideoCapture cap, int frameNum){
int idx = frameNum-1;
cv::Mat frame;
bool success;
cap.set ( CV_CAP_PROP_POS_FRAMES , idx );
success = cap.retrieve(frame);
return frame;
}
示例2: WriteCameraImage
void WriteCameraImage (const char sCameraImg[])
{
/*// Call capGrabFrame twice to flush images stored in the camera queue. This
// makes the screen image more responsive to the current position of the
// subject, especially when using slow stacked ASM models.
// TODO does this slow down the frame rate and is there a better way of doing this?
capGrabFrame(hgCapWnd);
capGrabFrame(hgCapWnd);
// now get the actual frame we want, and save it to disk
capGrabFrame(hgCapWnd);
capFileSaveDIB(hgCapWnd, sCameraImg);*/
cv::Mat frame;
cam.retrieve(frame);
img = Image(frame.cols, frame.rows, false);
memcpy(img.buf, frame.ptr(), sizeof(img));
cv::imwrite(sCameraImg, frame);
}
示例3: main
/**
* @function main
*/
int main( int argc, char* argv[] ) {
// Filter
gFilterLimits.resize(6);
//gFilterLimits << -0.35, 0.35, -0.70, 0.70, 1.5, 2.4; // Kinect
gFilterLimits << -1.0, 1.0, -1.5, 1.5, 0.35, 2.0; // Asus on top of Crichton
ObjectsDatabase mOd;
mOd.init_classifier();
mOd.load_dataset();
gCapture.open( cv::CAP_OPENNI2 );
if( !gCapture.isOpened() ) {
printf("\t [ERROR] Could not open the capture object \n");
return -1;
}
gCapture.set( cv::CAP_PROP_OPENNI2_MIRROR, 0.0 );
gCapture.set( cv::CAP_PROP_OPENNI_REGISTRATION, -1.0 );
gF = (float)gCapture.get( cv::CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH );
cv::namedWindow( gWindowName, cv::WINDOW_AUTOSIZE );
::google::InitGoogleLogging( argv[0] );
for(;;) {
if( !gCapture.grab() ) {
printf("\t * ERROR Could not grab a frame \n");
return -1;
}
gCapture.retrieve( gRgbImg, cv::CAP_OPENNI_BGR_IMAGE );
if( gIsSegmentedFlag ) { drawSegmented(); }
cv::imshow( gWindowName, gRgbImg );
gCapture.retrieve( gPclMap, cv::CAP_OPENNI_POINT_CLOUD_MAP );
cv::imshow( gWindowName, gRgbImg );
char k = cv::waitKey(30);
if( k == 'q' ) {
printf("\t Finishing program \n");
break;
}
/** Recognize */
else if( k == 'i' ) {
// Process image
process();
gLabels.resize(gClusters.size() );
gIndex.resize(gClusters.size() );
// Store images
for( int i = 0; i < gClusters.size(); ++i ) {
int xl = gBoundingBoxes[i](0);
int yl = gBoundingBoxes[i](1);
int xw = gBoundingBoxes[i](2)-gBoundingBoxes[i](0);
int yw = gBoundingBoxes[i](3)-gBoundingBoxes[i](1);
cv::Mat img( gRgbImg, cv::Rect( xl, yl,
xw, yw ) );
// Predict
mOd.classify( img, gIndex[i], gLabels[i] );
cv::putText( gRgbImg,
gLabels[i], cv::Point(gBoundingBoxes[i](0), gBoundingBoxes[i](1) ),
cv::FONT_HERSHEY_SIMPLEX, 1,
gColors[i],
2 );
mOd.sayIt(gIndex[i]);
}
} // else
} // for
} // main
示例4: makeGUI
void OpenCVTemplateApp::makeGUI() {
interface->clear();
interface->addButton("load image", [this] {
auto path = ci::app::getOpenFilePath();
image = cv::imread(path.string());
std::cout <<"cols "<<image.cols << std::endl;
std::cout <<"rows "<<image.rows << std::endl;
std::cout <<"channels "<<image.channels() << std::endl;
imageTexture = gl::Texture::create(fromOcv(image));
});
interface->addButton("load video", [this] {
auto path = ci::app::getOpenFilePath();
video.open(path.string());
frameWidth = video.get(cv::CAP_PROP_FRAME_WIDTH);
frameHeight = video.get(cv::CAP_PROP_FRAME_HEIGHT);
totalFrames = video.get(cv::CAP_PROP_FRAME_COUNT);
video.read(frame);
if(isGrayScale) {
cv::cvtColor(frame, frame, cv::COLOR_BGR2GRAY);
}
frameTexture = gl::Texture::create(fromOcv(frame));
makeGUI();
});
interface->addSeparator();
if(frameTexture) {
interface->addParam("gray scale", &isGrayScale).updateFn([this] {
video.retrieve(frame);
if(isGrayScale) {
cv::cvtColor(frame, frame, cv::COLOR_BGR2GRAY);
}
frameTexture = gl::Texture::create(fromOcv(frame));
makeGUI();
});
interface->addParam("nb of feature",&nbOfFeaturePoints).min(1).max(1000);
if(isGrayScale) {
interface->addButton("get feature points", [this] {
cv::goodFeaturesToTrack(frame, featurePoints, nbOfFeaturePoints, 0.01, 10, cv::Mat(), 3, 0, 0.04);
});
}
interface->addSeparator();
interface->addParam("frame",&frameIndex).min(0).max(totalFrames-1).step(1).updateFn([this] {
video.set(cv::CAP_PROP_POS_FRAMES,frameIndex);
video.read(frame);
if(isGrayScale) {
cv::cvtColor(frame, frame, cv::COLOR_BGR2GRAY);
}
frameTexture = gl::Texture::create(fromOcv(frame));
});
interface->addSeparator();
interface->addParam("speed", &frameSpeed).min(1).max(1000).step(1);
interface->addButton("play",[this] {
currentState = PLAY;
makeGUI();
});
if(currentState == PLAY) {
interface->addButton("pause",[this] {
currentState = PAUSE;
makeGUI();
});
}
}
}
示例5: main
int main()
{
double timeUse;
struct timeval startTime, stopTime;
cv::Mat rawImage, grayImage;
std::vector<cv::Rect> faces;
init();
spider_head(45);
std::stringstream logStream, outStream;
float faceX, faceY;
int8_t rotateDegree;
uint8_t rotatePwm;
uint8_t lostCounter = 0;
while(running)
{
logStream.str("");
logStream << std::fixed << std::setprecision(3);
outStream.str("");
outStream << std::fixed << std::setprecision(3);
gettimeofday(&startTime, NULL);
camera.retrieve(rawImage);
cv::cvtColor(rawImage, grayImage, cv::COLOR_BGR2GRAY);
cv::equalizeHist(grayImage, grayImage);
faces.clear();
face_cascade.detectMultiScale(grayImage, faces, 1.1,
2, 0|cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30));
if(faces.empty())
{
if(lostCounter != 0)
{
lostCounter --;
spider_rotate_degree(rotateDegree, rotatePwm, NULL, NULL);
logStream << "Face lost, lost counter: " << static_cast<int>(lostCounter) << ", ";
}
else
{
spider_move_stop();
logStream << "No face!";
}
}
else
{
lostCounter = 5;
faceX = faces[0].x+faces[0].width*0.5;
faceY = faces[0].y+faces[0].height*0.5;
logStream << "Get face, size: " << faces.size() << ", ";
logStream << "coordinate: x " << faceX << " y " << faceY;
if(faceX < 80)
{
rotateDegree = -5;
rotatePwm = 80;
}
else if(faceX > 80)
{
rotateDegree = 5;
rotatePwm = 80;
}
if(faceX < 70 || faceX > 90)
{
spider_rotate_degree(rotateDegree, rotatePwm, NULL, NULL);
}
//spider_move(1, 55);
}
gettimeofday(&stopTime, NULL);
timeUse = stopTime.tv_sec - startTime.tv_sec + (stopTime.tv_usec - startTime.tv_usec)/1000000.0;
if(timeUse < 0.25)
usleep((0.25 - timeUse) * 1000000);
outStream << "Time use: " << timeUse << "s, " << logStream.str();
std::cout << outStream.str() << std::endl;
}
void* result;
pthread_join(grabThread, &result);
spider_head(35);
spider_move_stop();
spider_rotate_stop();
spider_close();
camera.release();
std::cout << "Program exit!" << std::endl;
return 0;
}
示例6: main
int main() {
// 打开摄像头
video_capture.open(0);
if (!video_capture.isOpened()){
std::cerr << "Could not open video" << endl;
return -1;
}
// 获取第一张图像,用于这设置参数
video_capture >> input_image;
// 读取摄像机参数
camera_params.readFromXMLFile("camera.yml");
camera_params.resize(input_image.size());
// 注册窗口
cv::namedWindow("thres",1);
cv::namedWindow("in",1);
marker_dector.getThresholdParams(threshold_param1, threshold_param2);
i_threshold_param1 = threshold_param1;
i_threshold_param2 = threshold_param2;
cv::createTrackbar("ThresParam1", "in",&i_threshold_param1, 13, cvTackBarEvents);
cv::createTrackbar("ThresParam2", "in",&i_threshold_param2, 13, cvTackBarEvents);
char key=0;
int index=0;
//capture until press ESC or until the end of the video
while( key!=27 && video_capture.grab())
{
//copy image
video_capture.retrieve(input_image);
//number of images captured
index++;
//for checking the speed
double tick = (double)cv::getTickCount();
//Detection of markers in the image passed
marker_dector.detect(input_image, markers, camera_params, marker_size);
//chekc the speed by calculating the mean speed of all iterations
average_time.first += ((double)cv::getTickCount() - tick) / cv::getTickFrequency();
average_time.second++;
std::cout << "Time detection=" << 1000 * average_time.first / average_time.second << " milliseconds" << endl;
//print marker info and draw the markers in image
input_image.copyTo(input_image_copy);
for(unsigned int i = 0; i < markers.size(); i++){
std::cout << markers[i] << std::endl;
markers[i].draw(input_image, Scalar(0, 0, 255), 2);
}
//draw a 3d cube in each marker if there is 3d info
if ( camera_params.isValid())
for(unsigned int i = 0; i < markers.size(); i++){
aruco::CvDrawingUtils::draw3dCube(input_image, markers[i], camera_params);
aruco::CvDrawingUtils::draw3dAxis(input_image, markers[i], camera_params);
}
//DONE! Easy, right?
cout << endl << endl << endl;
//show input with augmented information and the thresholded image
cv::imshow("in", input_image);
cv::imshow("thres", marker_dector.getThresholdedImage());
key=cv::waitKey(0);//wait for key to be pressed
}
return 0;
}
示例7: main
int main(int argc, char** argv)
{
/// READ PARAMETERS
if(!readParameters(argc, argv))
return false;
/// CREATE UNDISTORTED CAMERA PARAMS
CameraParamsUnd=CameraParams;
CameraParamsUnd.Distorsion=cv::Mat::zeros(4,1,CV_32F);
cout<<" REATE UNDISTORTED CAMERA PARAMS "<<endl;
/// SET BOARD DETECTOR PARAMETERS
TheBoardDetector.setParams(TheBoardConfig,CameraParamsUnd,TheMarkerSize);
/// CAPTURE FIRST FRAME
TheVideoCapturer.grab();
TheVideoCapturer.retrieve ( TheInputImage );
cv::undistort(TheInputImage,TheInputImageUnd,CameraParams.CameraMatrix,CameraParams.Distorsion);
cout<<" CAPTURE FIRST FRAME "<<endl;
/// INIT OGRE
initOgreAR(CameraParamsUnd, TheInputImageUnd.ptr<uchar>(0));
cout<<" OGRE initiated "<<endl;
while (TheVideoCapturer.grab())
{
/// READ AND UNDISTORT IMAGE
TheVideoCapturer.retrieve ( TheInputImage );
cv::undistort(TheInputImage,TheInputImageUnd,CameraParams.CameraMatrix,CameraParams.Distorsion);
/// DETECT BOARD
float probDetect = TheBoardDetector.detect(TheInputImageUnd);
cout<<" detection: "<<probDetect<<endl;
/// UPDATE BACKGROUND IMAGE
mTexture->getBuffer()->blitFromMemory(mPixelBox);
/// UPDATE SCENE
if ( probDetect>0.2) ogreNode->setVisible(true);
else ogreNode->setVisible(false);
// set node pose
double position[3], orientation[4];
TheBoardDetector.getDetectedBoard().OgreGetPoseParameters(position, orientation);
ogreNode->setPosition( position[0], position[1], position[2] );
ogreNode->setOrientation( orientation[0], orientation[1], orientation[2], orientation[3] );
// Update animation
double deltaTime = 1.2*root->getTimer()->getMilliseconds()/1000.;
baseAnim->addTime(deltaTime);
topAnim->addTime(deltaTime);
root->getTimer()->reset();
/// RENDER FRAME
if(root->renderOneFrame() == false) break;
Ogre::WindowEventUtilities::messagePump();
/// KEYBOARD INPUT
keyboard->capture();
if (keyboard->isKeyDown(OIS::KC_ESCAPE)) break;
}
im->destroyInputObject(keyboard);
im->destroyInputSystem(im);
im = 0;
delete root;
return 0;
}