Opencv u型差异显示了预期COL的一半
在检查代码一千次之后,我看不出我做错了什么。 该算法非常简单:我有一个CV_16U图像,其中的视差值称为disp,我正在尝试建立u和v视差,以便检测障碍物Opencv u型差异显示了预期COL的一半,opencv,stereo-3d,disparity-mapping,Opencv,Stereo 3d,Disparity Mapping,在检查代码一千次之后,我看不出我做错了什么。 该算法非常简单:我有一个CV_16U图像,其中的视差值称为disp,我正在尝试建立u和v视差,以便检测障碍物 Mat v_disparity, u_disparity; v_disparity=Mat::zeros(disp.rows,numberOfDisparities*16, CV_16U); u_disparity=Mat::zeros(numberOfDisparities*16,disp.cols, CV_16U); for(int i
Mat v_disparity, u_disparity;
v_disparity=Mat::zeros(disp.rows,numberOfDisparities*16, CV_16U);
u_disparity=Mat::zeros(numberOfDisparities*16,disp.cols, CV_16U);
for(int i = 0; i < disp.rows; i++)
{
d = disp.ptr<ushort>(i); //d[j] is the disparity value
for (int j = 0; j < disp.cols; ++j)
{
v_disparity.at<uchar>(i,(d[j]))++;
u_disparity.at<uchar>((d[j]),j)++;
}
}
matv_视差,u_视差;
v_差异=矩阵::零(显示行,差异数*16,CV_16U);
u_Distance=Mat::零(NumberOfDistancess*16,显示列,CV_16U);
对于(int i=0;i
问题是,当我使用imshow打印转换为8位无符号后的两个差异时。u型视差是错误的,因为它有它应该有的形状,但它是水平维度的一半,是正确的黑色像素。我终于找到了答案。只是我在访问
u
和v-differences
中的像素值时使用了错误的模板。在v视差中,我没有检测到它,因为我认为disp中没有具有高视差值的像素。
总而言之,以下几行:
v_disparity.at<uchar>(i,(d[j]))++;
u_disparity.at<uchar>((d[j]),j)++;
(i,(d[j]))+;
u_.at((d[j]),j)+;
必须替换为:
v_disparity.at<ushort>(i,(d[j]))++;
u_disparity.at<ushort>((d[j]),j)++;
(i,(d[j]))+;
u_.at((d[j]),j)+;
因为两个图像都是CV_16U,uchar的类型是8位,而不是16位。我终于找到了答案。只是我在访问
u
和v-differences
中的像素值时使用了错误的模板。在v视差中,我没有检测到它,因为我认为disp中没有具有高视差值的像素。
总而言之,以下几行:
v_disparity.at<uchar>(i,(d[j]))++;
u_disparity.at<uchar>((d[j]),j)++;
(i,(d[j]))+;
u_.at((d[j]),j)+;
必须替换为:
v_disparity.at<ushort>(i,(d[j]))++;
u_disparity.at<ushort>((d[j]),j)++;
(i,(d[j]))+;
u_.at((d[j]),j)+;
由于两个图像都是CV_16U,并且uchar类型是8位,而不是16位。经过一些调试后,我发现d[j]的值始终等于disp.at(I,j)。我猜故障在u_视差线上。at((d[j]),j)+;但我看不到它经过一些调试后,我发现d[j]的值始终等于disp.at(I,j)。我猜故障在u_视差线上。at((d[j]),j)+;但我看不见