我试图找到二进制图像的非零(x,y)坐标。

我发现了对函数countNonZero()的一些引用,该函数仅计算非零坐标,而我不确定如何访问或使用findNonZero(),因为它似乎已从文档中完全删除。

This是我找到的最接近的引用,但仍然毫无帮助。我将不胜感激。

编辑:
-要指定,这是使用C++

最佳答案

Here说明了findNonZero()如何保存非零元素。以下代码对于访问二进制图像的非零坐标应该很有用。方法1在OpenCV中使用findNonZero(),方法2检查每个像素以找到非零(正)像素。

方法1:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;

int main(int argc, char** argv) {
    Mat img = imread("binary image");
    Mat nonZeroCoordinates;
    findNonZero(img, nonZeroCoordinates);
    for (int i = 0; i < nonZeroCoordinates.total(); i++ ) {
        cout << "Zero#" << i << ": " << nonZeroCoordinates.at<Point>(i).x << ", " << nonZeroCoordinates.at<Point>(i).y << endl;
    }
    return 0;
}

方法2:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;

int main(int argc, char** argv) {
    Mat img = imread("binary image");
    for (int i = 0; i < img.cols; i++ ) {
        for (int j = 0; j < img.rows; j++) {
            if (img.at<uchar>(j, i) > 0) {
                cout << i << ", " << j << endl;     // Do your operations
            }
        }
    }
    return 0;
}

关于c++ - OpenCV:查找二进制Mat图像的所有非零坐标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19242662/

10-11 22:54