获取白色像素的坐标(OpenCV)
Get coordinates of white pixels (OpenCV)
在 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());
有一个 built-in 函数可以做到这一点 cv::findNonZero
Returns non-zero 像素的位置列表。
给定一个二进制矩阵(可能从 cv::threshold()
、cv::compare()
、>
、==
等操作返回)returns 所有non-zero 索引为 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);
或
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];
你可以用这个方法得到白色像素..希望对你有帮助。
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
}
}
}
在 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());
有一个 built-in 函数可以做到这一点 cv::findNonZero
Returns non-zero 像素的位置列表。
给定一个二进制矩阵(可能从 cv::threshold()
、cv::compare()
、>
、==
等操作返回)returns 所有non-zero 索引为 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);
或
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];
你可以用这个方法得到白色像素..希望对你有帮助。
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
}
}
}