• Content Count

  • Joined

  • Last visited

  1. Hi everyone, Hardware: Zybo Z7-20, PCam 5C, sd card Software: SDSoC 2017.4, reVISION platform for Zybo Z7-20 (release, v2017.2-3) The “Simple Filter2d Live I/O demo for Pcam5C” is perfectly working (following the readme in reVISION download archive). This code is the starting point for my application. My C++ skills are far from expert level and also quite rusty. I’m developing a live video application for my master thesis. The current step is to implement motion detection. The (simple) concept is to compute the difference between a background image and the current video frame: Initialize: first frame --> (to grey scale) --> (optional: resize) --> gaussian blur ==> background image Loop: frame --> difference to background image --> threshold --> dilate --> find contours ==> list of contours Question: I’m stuck right at the first part, the initialization. The image is already grey scale. The resizing I currently omitted. So the only remaining task is Gaussian blurring. At runtime, when xf::GaussianBlur is called, the program goes into loop, infinitely throwing the following error: Even the first print statement after xf::GaussianBlur is not reached. Since xf::GaussianBlur tries to create hls::streams for both the xf::Mat parameters, I thought that the src matrix might be empty. But printing the first 40 pixels (not included in the code below) yields reasonable values… Any help appreciated! The code (that differs from "Live I/O demo"): Additional #defines in platform.h: // parameters for xf::Mat template with 1 channel. #define XFMAT_1C XF_8UC1,MAX_HEIGHT,MAX_WIDTH,XF_NPPC1 #define GAUSSBLUR_MAX_KERNELSIZE 30 // guessed #define GAUSSBLUR_MAX_SIGMA 10 // guessed #define GAUSSBLUR_SIGMA 2.0 // guessed Code in main.cpp: /* [The initialization stuff: v4l2 input, terminal, drm output, switches&buttons, ncurses] */ // Start capturing frames from video input (Pcam 5C on CSI port). v4l2_helper_start_cap(&v4l2_help); // Get the first frame - a grey-scale image (Y) (from YUV image???). unsigned int v4l2_buf_index = v4l2_helper_readframe(&v4l2_help); uint8_t* firstFrame = (uint8_t*) v4l2_help.buffers[v4l2_buf_index].start[V4L2_FORMAT_Y_PLANE]; xf::Mat<XFMAT_1C> xFirstFrame(vActiveIn, hActiveIn, (void*)firstFrame); // Store first frame as background frame. xf::Mat<XFMAT_1C> xBackground (xFirstFrame.rows, xFirstFrame.cols); xf::GaussianBlur<GAUSSBLUR_MAX_KERNELSIZE, GAUSSBLUR_MAX_SIGMA, XFMAT_1C>(xFirstFrame, xBackground, GAUSSBLUR_SIGMA); // for debugging: mvprintw( 11, 0, "xBackground:"); wrefresh(mywin); for(size_t i = 0; i < 40; i++) { mvprintw( 11, 16 + 4*i, "%u ", xBackground.copyFrom()[i] ); } wrefresh(mywin); /* Loop is commented. Only the cleanup remains at the end: endwin(), etc. */