c++ Otsu二值化 opencv代码
时间: 2024-10-22 21:12:50 浏览: 30
Otsu二值化是一种常用的图像处理技术,它能在不需要人工设定阈值的情况下自动确定一个最佳的二值化界限,用于将灰度图像转换成黑白图像,常用于图像分割。在OpenCV库中,可以使用`cv::threshold()`函数结合Otsu算法实现这个过程。以下是一个简单的示例:
```cpp
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc.hpp>
int main() {
// 加载图像
cv::Mat src = cv::imread("input_image.jpg", cv::IMREAD_GRAYSCALE);
if (src.empty()) {
std::cout << "Error loading image" << std::endl;
return -1;
}
// 使用Otsu二值化
cv::Mat dst;
int thresholdValue;
cv::threshold(src, dst, thresholdValue, 255, cv::THRESH_BINARY + cv::THRESH_OTSU);
// 显示原图和处理后的图像
cv::imshow("Original Image", src);
cv::imshow("Otsu Binarized Image", dst);
// 等待用户按键,然后关闭窗口
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
```
在这个代码中,`cv::THRESH_BINARY + cv::THRESH_OTSU`表示同时进行二值化(`cv::THRESH_BINARY`)和使用Otsu方法选择阈值。运行程序后,会显示原始图像和经过Otsu二值化的结果。
阅读全文