本文共 2103 字,大约阅读时间需要 7 分钟。
阈值操作是图像处理中常用的技术,用于将图像中的一部分区域提取或保留。OpenCV提供了多种阈值操作类型,这些操作可以通过调用threshold函数来实现。以下是常见的五种阈值操作类型及其对应的OpenCV实现方式。
Threshold Binary
将大于阈值的灰度值设为最大灰度值,小于阈值的值设为0。OpenCV实现:threshold(gray, dst, th_val, max_BINARY_val, THRESH_BINARY);Threshold Binary Inverted
将大于阈值的灰度值设为0,大于阈值的值设为最大灰度值。OpenCV实现:threshold(gray, dst, th_val, max_BINARY_val, THRESH_BINARY_INV);Truncate
将大于阈值的灰度值设为阈值,小于阈值的值保持不变。OpenCV实现:threshold(gray, dst, th_val, max_val, THRESH_TRUNC);Threshold to Zero
将小于阈值的灰度值设为0,大于阈值的值保持不变。OpenCV实现:threshold(gray, dst, th_val, max_BINARY_val, THRESH_TOZERO);Threshold to Zero Inverted
将大于阈值的灰度值设为0,小于阈值的值保持不变。OpenCV实现:threshold(gray, dst, th_val, max_BINARY_val, THRESH_TOZERO_INV);以下是一个使用OpenCV进行阈值操作的简单程序示例:
#include "cv.h"#include "highgui.h"#include "opencv2/imgproc/imgproc.hpp"using namespace std;using namespace cv;Mat src, gray, dst;const char *wnd = "Demo";int th_val = 0;int th_type = 3;const int max_val = 255;const int max_type = 4;const int max_BINARY_val = 255;static void Thresh(int, void *) { threshold(gray, dst, th_val, max_BINARY_val, th_type); imshow(wnd, dst);}int main(int argc, char *argv) { if (argc < 2) { cout << "Usage: ./threshold [file name]" << endl; return -1; } // 创建滑动条 createTrackbar("Value", wnd, &th_val, max_val, Thresh); // 读取图像 src = imread("image.jpg"); if (src.empty()) { cout << "Error: Failed to read image." << endl; return -1; } // 转换为灰度图像 cvtColor(src, gray, CV_GRAY2BGR); // 主循环 while (true) { if (waitKey() == 'q') { break; } } return 0;} threshold函数
threshold(src, dst,阈值,最大值,阈值类型)用于对灰度图像进行阈值操作。参数说明: src:输入图像。dst:输出图像。阈值:设定阈值。最大值:最大灰度值,根据阈值类型不同,可能为255或其他值。阈值类型:决定阈值操作类型,取值范围为0~4。createTrackbar函数
createTrackbar("Value", wnd, &th_val, max_val, Thresh); wnd:窗口名称。&th_val:阈值变量。max_val:滑动条的最大值范围。Thresh:滑动条回调函数,调整阈值后自动调用。通过上述程序可以看到不同阈值操作类型的效果对比。以下是使用不同阈值操作后的图像展示:
阈值操作2:
将大于阈值的灰度值设为0,大于阈值的值设为最大灰度值。阈值操作3:
将大于阈值的灰度值设为阈值,小于阈值的值保持不变。通过实际图像对比可以看出,不同阈值操作类型对图像的影响显著,选择合适的阈值操作类型对后续图像处理有重要影响。
转载地址:http://bgsfk.baihongyu.com/