用cornersubpix 写一个案例 c++的
时间: 2023-12-04 14:03:33 浏览: 25
以下是一个使用OpenCV库中的cv::cornerSubPix函数对图像中的角点进行亚像素级别的精确化的C++示例:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
// 读取图像
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
if (image.empty())
{
std::cout << "无法读取图像" << std::endl;
return -1;
}
// 检测角点
std::vector<cv::Point2f> corners;
cv::goodFeaturesToTrack(image, corners, 100, 0.01, 10);
// 亚像素级别的精确化
cv::TermCriteria criteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 30, 0.1);
cv::cornerSubPix(image, corners, cv::Size(5, 5), cv::Size(-1, -1), criteria);
// 在图像中绘制角点
for (const auto& corner : corners)
{
cv::circle(image, corner, 3, cv::Scalar(0, 255, 0), -1);
}
// 显示结果
cv::imshow("Corners", image);
cv::waitKey(0);
return 0;
}
```
这个示例首先从文件中读取图像,然后使用`cv::goodFeaturesToTrack`函数检测图像中的角点。接下来,使用`cv::cornerSubPix`函数对角点进行亚像素级别的精确化。最后,使用`cv::circle`函数在图像中绘制角点,并通过`cv::imshow`函数显示结果。
请确保将示例代码中的`"image.jpg"`替换为您要处理的图像的路径。