C++ 非零坐标向量中的8-邻域

C++ 非零坐标向量中的8-邻域,c++,opencv,C++,Opencv,从Canny算子得到的边缘图像8UC1中,我想遍历所有的白色像素并找到它们的8邻域 作为第一步,我申请 findNonZero(edgesFromCanny, nonZeroCoordinates); 仅获取所有白色像素以增加计算时间。 然后,非零坐标中这些像素的坐标按行顺序排列,以便p(x=100,y=1)可以远离非零坐标中的p(x=100,y=2)(列方向),而p(x=100,y=1)和p(x=101,y=1)在非零坐标中是后续的(如果它们是边) 如何(快速)检索p(x=100,y=1)的

从Canny算子得到的边缘图像8UC1中,我想遍历所有的白色像素并找到它们的8邻域

作为第一步,我申请

findNonZero(edgesFromCanny, nonZeroCoordinates);
仅获取所有白色像素以增加计算时间。 然后,非零坐标中这些像素的坐标按行顺序排列,以便p(x=100,y=1)可以远离非零坐标中的p(x=100,y=2)(列方向),而p(x=100,y=1)和p(x=101,y=1)在非零坐标中是后续的(如果它们是边)


如何(快速)检索p(x=100,y=1)的8邻域,考虑到它也是一条边

我找到了一个使用kNN的解决方案,但我不确定这个解决方案是否不需要太多计算,或者可以有一个更简单的解决方案:

    vector<Point2f> edgesVec; //Insert all 2D points to this vector
    flann::KDTreeIndexParams indexParams;
    flann::Index kdtree(Mat(edgesVec).reshape(1), indexParams);
    vector<float> query;
    query.push_back(i); //Insert the 2D point we need to find neighbours to the query
    query.push_back(j); //Insert the 2D point we need to find neighbours to the query
    vector<int> indices;
    vector<float> dists;
    kdtree.radiusSearch(query, indices, dists, 1.5, 8);
vector edgesVec//将所有二维点插入此向量
法兰:kdtreeindexparamsindexparams;
flann::索引kdtree(Mat(edgesVec)。重塑(1),索引参数);
向量查询;
查询。推回(i)//插入我们需要查找查询邻居的2D点
查询。推回(j)//插入我们需要查找查询邻居的2D点
向量指数;
向量距离;
radiusSearch(查询,索引,距离,1.5,8);

是否要检索8邻域中的所有白色像素?因为在没有任何额外条件的情况下,8邻域只是每个白色像素周围的8个像素。是的,我只想检索所有这些白色像素,它们位于实际像素的8邻域中(I,j和I,j周围的+1/-1)-这意味着,这个特定邻域中的黑色像素不应该返回。