Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

strange result of transformation of frame of VideoCapture

I have a code

VideoCapture cap("test.mp4"); 
 if(!cap.isOpened()){
    cout << "Error opening video stream or file" << endl;
    return -1;
  }
while(1){

        Mat frame; 

    // Capture frame-by-frame 
    cap >> frame;

    // If the frame is empty, break immediately
    if (frame.empty())
      break;   
    // Display the resulting frame    
    imshow( "Fr", test(frame ));

    // Press  ESC on keyboard to  exit
    char c = (char)waitKey(1);
    if( c == 27 ) 
      break;
  }
  cap.release();

and function test()

Mat test(Mat frame){
for(int i = 0; i < frame.rows; i++){
for(int j = 0; j < frame.cols; j++){
frame.at<uchar>(i,j) = 250;
}
}
return frame;
}

I expected that this function will return a transformed frame, totally white. But instead, it returns me a frame where 1/3 of columns white: image description

if I transform code above

for(int j = 0; j < 2*frame.cols; j++){

instead of

for(int j = 0; j < frame.cols; j++){

I got this:

image description

and if I change code like this:

for(int j = 0; j < 3*frame.cols; j++){

I eventually got that I expected, white frame. image description

Why it works so weird? I have a loop on all rows and columns and yet I don't get totally white picture. If I use this function test() on usual picture, it returns white Mat. But with frame of VideoCapture result is different. Why?