Hi.
I am using L2 example of pyr dense optical flow example to compute optical flow. I wanted to create a bounding box at a specif point, which then should relocate according to flow. Which i successfully performed in opencv version. However, in accelerated example, the bounding box relocates in whole frame instead of ROI. I am unaware of that if i am using the correct approach or not. would appreciate if anyone could guide.
This is the flow that i managed to extract. Which i am not completely sure if its correct or not
unsigned int flow_data_at_pos = flow_data[bbox_y * WIDTH + bbox_x];
// Extract x and y components from the flow_data
int flow_x = (flow_data_at_pos >> 16) & 0xFFFF; // Higher 16 bits
int flow_y = flow_data_at_pos & 0xFFFF; // Lower 16 bits
// Convert unsigned components to signed if necessary
if (flow_x & 0x8000) flow_x -= 0x10000; // Handle negative values for x
if (flow_y & 0x8000) flow_y -= 0x10000; // Handle negative values for y
This is the initialization of the bounding box
// Update the bounding box position based on flow components
bbox_x += flow_x;
bbox_y += flow_y;
// Ensure the bounding box stays within image bounds
if (bbox_x < 0) bbox_x = 0;
if (bbox_y < 0) bbox_y = 0;
if (bbox_x + bbox_width > WIDTH) bbox_x = WIDTH - bbox_width;
if (bbox_y + bbox_height > HEIGHT) bbox_y = HEIGHT - bbox_height;
This is the relocation of bounding box
// write output flow vectors to Mat after splitting the bits.
for (int i = 0; i < pyr_h[0]; i++) {
for (int j = 0; j < pyr_w[0]; j++) {
unsigned int tempcopy = 0;
{
// tempcopy = *(flow.data + i*pyr_w[0] + j);
tempcopy = flow.read(i * pyr_w[0] + j);
}
// fprintf(fp_flow, "%u\n", tempcopy);
short splittemp1 = (tempcopy >> 16);
short splittemp2 = (0x0000FFFF & tempcopy);
TYPE_FLOW_TYPE* uflow = (TYPE_FLOW_TYPE*)&splittemp1;
TYPE_FLOW_TYPE* vflow = (TYPE_FLOW_TYPE*)&splittemp2;
// Update the bounding box position based on flow components
bbox_x += flow_x;
bbox_y += flow_y;
// Ensure the bounding box stays within image bounds
if (bbox_x < 0) bbox_x = 0;
if (bbox_y < 0) bbox_y = 0;
if (bbox_x + bbox_width > WIDTH) bbox_x = WIDTH - bbox_width;
if (bbox_y + bbox_height > HEIGHT) bbox_y = HEIGHT - bbox_height;
glx.at<float>(i, j) = (float)*uflow;
gly.at<float>(i, j) = (float)*vflow;
Hi. I am using L2 example of pyr dense optical flow example to compute optical flow. I wanted to create a bounding box at a specif point, which then should relocate according to flow. Which i successfully performed in opencv version. However, in accelerated example, the bounding box relocates in whole frame instead of ROI. I am unaware of that if i am using the correct approach or not. would appreciate if anyone could guide.
This is the flow that i managed to extract. Which i am not completely sure if its correct or not
// cl::copy(q, flow_buf, flow_data.begin(), flow_data.end());
This is the initialization of the bounding box // Update the bounding box position based on flow components bbox_x += flow_x; bbox_y += flow_y;
This is the relocation of bounding box
// fprintf(fp_flow, "%u\n", tempcopy); short splittemp1 = (tempcopy >> 16); short splittemp2 = (0x0000FFFF & tempcopy);
Any help would be much appreciated.
Thank you