c++ - 如何在opencv中以 vector 数据类型存储点坐标?

标签 c++ opencv

我有一个 Mat 对象 (CV_8UC1),它是一个二进制映射,某些位置为 1,否则为 0。我想创建一个 vector 来存储 Mat 为 1 的点的坐标。关于如何进行的任何建议去做吧。 我知道我可以使用以下代码循环图像并检查点

for( int p = 1; p <= img.rows; p++ )
    { for( int q = 1; q <= img.cols; q++ )
        {
            if(  img.at<uchar>(p,q) == 1 )
            {
                //what to do here ? 
            }
        }
    }

此外,我需要坐标为单精度 float 。这是为了将其用作另一个需要 vector 的函数的输入。 请给我一个提示。我不熟悉 vector 数据类型和STL。

最佳答案

如果你想用 OpenCV 在二值图中找到所有非零坐标,最好的方法是使用 findNonZero .

这是一个如何使用它的示例(使用虚拟矩阵,但您明白了):

cv::Mat img(100, 100, CV_8U, cv::Scalar(0));
img.at<uchar>(50, 50) = 255;
img.at<uchar>(70, 50) = 255;
img.at<uchar>(58, 30) = 255;

cv::Mat nonZeroes;

cv::findNonZero(img, nonZeroes);

std::vector<cv::Point2f> coords(nonZeroes.total());

for (int i = 0; i < nonZeroes.total(); i++) {
    coords[i] = nonZeroes.at<cv::Point>(i);
}

关于c++ - 如何在opencv中以 vector 数据类型存储点坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38634855/

相关文章:

c++ - 读取 svm 数据并用更多数据重新训练?

c++ - 有人有在 iOS 下运行的 OpenGL ES 2.0 Qt 5 示例吗?

c# - C++ 正则表达式 : convert C# regex to C++ Linux

c++ - 处理矩阵边缘的正确方法

c++ - imread 命令后 OpenCV 矩阵内存释放

OpenCV:为什么主分支中没有 OCL 模块?

c++ - Qt UI 关闭命令

c++ - 在运行时修改模板函数的名称 - 可能吗?

visual-studio-2010 - OpenCV 2.3.1 安装,VS 2010,MEX

c++ - 将位图转换为垫子