我有一个 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/