|
|
|
@ -494,11 +494,15 @@ bool VideoCapture::retrieve(Mat& image, int channel) |
|
|
|
|
|
|
|
|
|
bool VideoCapture::read(Mat& image) |
|
|
|
|
{ |
|
|
|
|
if (get(CV_CAP_PROP_POS_FRAMES) < get(CV_CAP_PROP_FRAME_COUNT)) |
|
|
|
|
if(!grab()) |
|
|
|
|
image.release(); |
|
|
|
|
else |
|
|
|
|
retrieve(image); |
|
|
|
|
double frame_pos = get(CV_CAP_PROP_POS_FRAMES); |
|
|
|
|
double frame_count = get(CV_CAP_PROP_FRAME_COUNT); |
|
|
|
|
if (frame_pos < frame_count || frame_pos < 0 || frame_count < 0) |
|
|
|
|
{ |
|
|
|
|
if(grab()) |
|
|
|
|
retrieve(image); |
|
|
|
|
else |
|
|
|
|
image.release(); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
image.release(); |
|
|
|
|
return !image.empty(); |
|
|
|
@ -506,10 +510,7 @@ bool VideoCapture::read(Mat& image) |
|
|
|
|
|
|
|
|
|
VideoCapture& VideoCapture::operator >> (Mat& image) |
|
|
|
|
{ |
|
|
|
|
if(!grab()) |
|
|
|
|
image.release(); |
|
|
|
|
else |
|
|
|
|
retrieve(image); |
|
|
|
|
read(image); |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|