opencv c++ 统计所有非零点的坐标
时间: 2023-07-25 13:20:30 浏览: 71
可以使用 OpenCV 的 `findNonZero` 函数来查找所有非零点的坐标。该函数的原型如下:
```cpp
void findNonZero(InputArray src, OutputArray idx);
```
其中 `src` 是输入图像,`idx` 是输出的非零点坐标(每个非零点对应一个 `cv::Point`)。下面是一个简单的示例:
```cpp
cv::Mat src = cv::imread("image.png", cv::IMREAD_GRAYSCALE);
cv::Mat dst;
cv::findNonZero(src, dst);
for (int i = 0; i < dst.total(); i++) {
std::cout << "x: " << dst.at<cv::Point>(i).x << ", y: " << dst.at<cv::Point>(i).y << std::endl;
}
```
该示例会读取名为 `image.png` 的灰度图像,然后使用 `findNonZero` 函数查找所有非零点的坐标,并输出到控制台。
相关问题
opencv 提取二值图非零点坐标
图像中所有非零点的坐标可以使用opencv中的findNonZero函数来提取。例如,如果有一个二值图像变量img,可以使用以下代码提取非零点坐标:
```
vector<Point> nonZeroCoordinates;
findNonZero(img, nonZeroCoordinates);
```
将提取到的非零点坐标存储在一个vector<Point>类型的变量nonZeroCoordinates中。
opencv使用c++输出图形中心坐标
要输出图形中心坐标,你需要先使用OpenCV读取图像,然后找到图形的中心位置。以下是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取图像
Mat image = imread("example.jpg");
// 转换为灰度图像
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
// 二值化图像
Mat binary;
threshold(gray, binary, 100, 255, THRESH_BINARY);
// 查找轮廓
vector<vector<Point>> contours;
findContours(binary, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 计算中心坐标
Moments moment = moments(contours[0]);
Point center(moment.m10 / moment.m00, moment.m01 / moment.m00);
cout << "Center: (" << center.x << ", " << center.y << ")" << endl;
// 在图像上绘制中心点
circle(image, center, 5, Scalar(0, 0, 255), -1);
// 显示图像
imshow("Image", image);
waitKey(0);
return 0;
}
```
这个示例代码中,我们首先读取了一张图像,然后将其转换为灰度图像,并进行二值化处理。接着,我们使用 `findContours` 函数查找图像中的轮廓。由于我们只有一个轮廓,所以直接使用 `contours[0]` 访问它。然后,我们使用 `moments` 函数计算轮廓的矩,从而得到中心坐标。最后,在图像上绘制中心点,将其显示出来。
注意,这个示例代码只能处理单个轮廓的情况。如果你的图像中有多个轮廓,你需要修改代码来处理这种情况。