c – 在向量中存储非零元素的坐标时,findnonzero()出错

我试图将Mat img1的非零元素索引存储到向量vp1中,但它在内存位置错误时显示了一个cv :: Exception.当垫子不包含任何非零元素时会发生这种情况.示例代码如下.从img中找到非零元素指示并存储在vp中是成功的,但是存储从img1到vp1的非零元素指示显示错误.任何帮助解决这个问题将不胜感激.我想要点矢量中的坐标只是因为我的其余算法是基于它运行的.

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main() {
    Mat img(10, 10, CV_8U, Scalar::all(0));
    img.at<uchar>(0,2)=1;
    vector<Point> vp;
    findNonZero(img, vp);

    Mat img1(10, 10, CV_8U, Scalar::all(0));
    vector<Point> vp1;
    findNonZero(img1, vp1);

    return 0;
}

最佳答案 此错误是因为cv :: Mat中没有非零元素.

我认为它已在更新版本中得到纠正.

虽然它增加了复杂性,但我给出了一个简单的解决方案(正如@berak在评论中解释的那样)

vector<Point> locations;
int count = countNonZero(binaryMat);
if(count < 0)
{
    findNonZero(binaryMat,locations);
}
点赞