获取白色像素的坐标(OpenCV)

kar*_*l71 5 c++ opencv matrix threshold

在OpenCV(C++)中,我有一个黑白图像,其中一些形状显示为白色(255).知道这一点,我怎样才能获得这些对象所在的图像中的坐标点?我对获取所有白色像素坐标感兴趣.

有比这更清洁的方式吗?

std::vector<int> coordinates_white; // will temporaly store the coordinates where "white" is found 
for (int i = 0; i<img_size.height; i++) {
    for (int j = 0; j<img_size.width; j++) {
        if (img_tmp.at<int>(i,j)>250) {
            coordinates_white.push_back(i);
            coordinates_white.push_back(j);
        }
    }
}
// copy the coordinates into a matrix where each row represents a *(x,y)* pair
cv::Mat coordinates = cv::Mat(coordinates_white.size()/2,2,CV_32S,&coordinates_white.front());
Run Code Online (Sandbox Code Playgroud)

stu*_*men 10

有一个内置函数来做cv :: findNonZero

返回非零像素的位置列表.

给定的二进制矩阵(可能从一个操作返回如cv::threshold(),cv::compare(),>,==,等等)返回所有非零指数的作为cv::Matstd::vector<cv::Point>

例如:

cv::Mat binaryImage; // input, binary image
cv::Mat locations;   // output, locations of non-zero pixels
cv::findNonZero(binaryImage, locations);
// access pixel coordinates
Point pnt = locations.at<Point>(i);
Run Code Online (Sandbox Code Playgroud)

要么

cv::Mat binaryImage; // input, binary image
vector<Point> locations;   // output, locations of non-zero pixels
cv::findNonZero(binaryImage, locations);
// access pixel coordinates
Point pnt = locations[i];
Run Code Online (Sandbox Code Playgroud)