异常:opencv imshow断言失败

异常:opencv imshow断言失败,opencv,computer-vision,imshow,Opencv,Computer Vision,Imshow,这个问题与我的另一个问题有关。基本上,我在使用cv::imshow(“window”,mat)时遇到以下异常: OpenCV错误:断言失败(p[-1]你也可以发布嵌套的循环参数吗?完成。请参见上文imshow()只能处理2d图像。(另外,convertTo()只更改单个元素的类型,而不是通道。)总之,我宁愿避免OpenCV中的3d Mat,它们不是“自然的”(并且支持不好)使用Mat(h、w、CV_32FC3)相反 cv::Mat depthMat( height, width, CV_8UC1

这个问题与我的另一个问题有关。基本上,我在使用cv::imshow(“window”,mat)时遇到以下异常:


OpenCV错误:断言失败(p[-1]你也可以发布嵌套的循环参数吗?完成。请参见上文imshow()只能处理2d图像。(另外,convertTo()只更改单个元素的类型,而不是通道。)总之,我宁愿避免OpenCV中的3d Mat,它们不是“自然的”(并且支持不好)使用Mat(h、w、CV_32FC3)相反
cv::Mat depthMat( height, width, CV_8UC1 );
int sizes[3] = { height, width, 3 };
cv::Mat normMat(3, sizes, CV_32F, cv::Scalar::all(0));

//for loop
//normal calculation
normMat.at<float>(i, j, 0) = fVec3[0];
normMat.at<float>(i, j, 1) = fVec3[1];
normMat.at<float>(i, j, 2) = fVec3[2];

//end for loop
cv::Mat normColorMap(height, width, CV_8UC3);

normMat.convertTo(normColorMap, CV_8U, 0, 255);

cv::namedWindow("Normals");
cv::imshow("Normals", normColorMap);
for (int i = 5; i < height; i++){
                for (int j = 5; j < width-5; j++){

                cv::Point3f p1(i, j, (float)depthMat.at<unsigned char>(i, j));
                cv::Point3f p2(i - 5, j, (float)depthMat.at<unsigned char>(i - 5, j));
                cv::Point3f p3(i, j + 5, (float)depthMat.at<unsigned char>(i, j + 5));

                //compute vector in vertical and horizontal direction
                    float fVec1[3];
                    float fVec2[3];
                    float fVec3[3];

                    fVec1[0] = p2.x - p1.x;
                    fVec1[1] = p2.y - p1.y;
                    fVec1[2] = p2.z - p1.z;

                    fVec2[0] = p3.x - p1.x;
                    fVec2[1] = p3.y - p1.y;
                    fVec2[2] = p3.z - p1.z;

                //Computer the cross product of these 2 vectors in the image plane  
                    fVec3[0] = (fVec1[1] * fVec2[2]) - (fVec1[2] * fVec2[1]);
                    fVec3[1] = (fVec1[2] * fVec2[0]) - (fVec1[0] * fVec2[2]);
                    fVec3[2] = (fVec1[0] * fVec2[1]) - (fVec1[1] * fVec2[0]);

                    //Normalize the surface normal vector (fVec3)
                    float flen = sqrt(fVec3[0] * fVec3[0] + fVec3[1] * fVec3[1] + fVec3[2] * fVec3[2]);
                    fVec3[0] = fVec3[0] / flen;
                    fVec3[1] = fVec3[1] / flen;
                    fVec3[2] = fVec3[2] / flen;



                    normMat.at<float>(i, j, 0) = fVec3[0];
                    normMat.at<float>(i, j, 1) = fVec3[1];
                    normMat.at<float>(i, j, 2) = fVec3[2];



            }
        }