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

#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);
}

关于c++ - 在 vector<Point> 中存储非零元素的坐标时 findnonzero() 出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24953187/

10-09 21:38