1.概述
在深度学习出现之前,图像中的阈值法处理主要有二值阈值法、自适应阈值法、Ostu阈值法。
2.理论对比
3.代码实现
cpp
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, char** argv) {
if(argc != 2) {
std::cerr << "Usage: " << argv[0] << " <image_path>" << std::endl;
return -1;
}
// Load the image
cv::Mat image = cv::imread(argv[1], cv::IMREAD_GRAYSCALE);
if(image.empty()) {
std::cerr << "Error: Couldn't read the image. Check the path and try again." << std::endl;
return -1;
}
cv::imshow("Original Image", image);
// Binary Thresholding
cv::Mat binaryThresholded;
cv::threshold(image, binaryThresholded, 127, 255, cv::THRESH_BINARY);
cv::imshow("Binary Thresholding", binaryThresholded);
// Adaptive Thresholding
cv::Mat adaptiveThresholded;
cv::adaptiveThreshold(image, adaptiveThresholded, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 11, 2);
cv::imshow("Adaptive Thresholding", adaptiveThresholded);
// Otsu's Thresholding
cv::Mat otsuThresholded;
cv::threshold(image, otsuThresholded, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
cv::imshow("Otsu's Thresholding", otsuThresholded);
// Wait for a key press and then close
cv::waitKey(0);
return 0;
}