我试图复制这里讨论的密集光流: https://nanonets.com/blog/optical-flow/。这是我用来处理每个光流帧的代码片段。直觉是,H->梯度角度,S->255,V->梯度幅值的规范值。梯度来自calcOpticalFlowFarenback的输出。
当使用归一化类型cv::NORM_L2时,我的整个HSV的V数组只返回零。但是当更改为cv::NORM_MINMAX时,它返回非零值。我认为cv::normalize的实际功能是在alpha和beta范围内归一化数组。Norm只是用于实现范围目标的归一化公式类型。那么为什么我们会看到输出差异呢?
提前感谢!
cv::calcOpticalFlowFarneback(prevgray,gray,flow,0.5,3,15,3,5,1.2,0);
cv::split(flow,channels);
cv::cartToPolar(channels[0],channels[1],mag,angle);
std::vector<cv::Mat> channels_m;
cv::Mat c1 (Mask.size(),CV_8UC1);
cv::Mat c0 (Mask.size(),CV_8UC1);
cv::Mat c2 (Mask.size(),CV_8UC1);
c1 = cv::Scalar::all(255);
c0= angle*((180/3.14)/2);
c0.convertTo(c0, CV_8U);
cv::normalize(mag,c2,0,255,cv::NORM_MINMAX); <----- Line of interest
c2.convertTo(c2, CV_8U);
channels_m.push_back(c0);
channels_m.push_back(c1);
channels_m.push_back(c2);
cv::merge(channels_m,Mask);
cv::cvtColor(Mask,cflow,cv::COLOR_HSV2BGR_FULL);
当使用归一化类型cv::NORM_L2时,我的整个HSV的V数组只返回零。但是当更改为cv::NORM_MINMAX时,它返回非零值。我认为cv::normalize的实际功能是在alpha和beta范围内归一化数组。Norm只是用于实现范围目标的归一化公式类型。那么为什么我们会看到输出差异呢?
提前感谢!