Получить координаты белых пикселей (OpenCV)

В OpenCV (С++) у меня есть черно-белое изображение, где некоторые фигуры кажутся заполненными белым (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());

person karl71    schedule 24.01.2016    source источник


Ответы (2)


для этого есть встроенная функция cv:: найтиNonZero

Возвращает список местоположений ненулевых пикселей.

Учитывая двоичную матрицу (вероятно, возвращенную из операции, такой как cv::threshold(), cv::compare(), >, == и т. д.), возвращает все ненулевые индексы как cv::Mat или std::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);

or

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];
person sturkmen    schedule 24.01.2016

вы можете использовать этот метод, чтобы получить белые пиксели. Надеюсь, это поможет вам.

 for(int i = 0 ;i <image.rows() ; i++){// image:the binary image
                for(int j = 0; j< image.cols() ; j++){
                    double[] returned = image.get(i,j); 
                    int value = (int) returned[0]; 
                    if(value==255){
                    System.out.println("x: " +i + "\ty: "+j);//(x,y) coordinates
                    }
                }

            }
person Tanusree    schedule 05.07.2016